确保一堆pthread
同时启动的不同方法是什么?
我只能找到一种方法,即在主线程中初始化屏障
,然后在新创建的pthread中等待它。
确保一堆pthread
同时启动的不同方法是什么?
我只能找到一种方法,即在主线程中初始化屏障
,然后在新创建的pthread中等待它。
我过去就是这么做的。
main:
claim mutex
for each desired thread:
start child
release mutex
:
child:
claim mutex
release mutex
:
请注意,这实际上并不能保证所有线程都在第一个线程开始做某件事之前就已经启动了,只是主线程已经创建了它们。
为了做到这一点,您可以使用以下方法:
main:
claim mutex
set unstarted to 0
for each desired thread:
start child
add 1 to unstarted
release mutex
:
child:
claim mutex
subtract 1 from unstarted
while unstarted > 0:
release mutex
yield // if necessary
claim mutex
release mutex
:
线程必须进行的任何初始化都将发生在声明
和减法
之间。
我从进一步的调查中看到,障碍实际上是一种更优雅的方式。它们在我使用的pthread实现中实际上并不可用,这就是为什么我的代码看起来有点冗长的原因。
然而,我将保持原样,除非有人使用v6之前的pthreads或不同的线程方法(没有障碍),因为正如所问的那样,这是一种不同的方式。
您可以使用pthread_cond_broadcast
。由于互斥,它们不会完全同时启动。您可以尝试为每个线程使用不同的互斥体,但对同一个条件变量使用不同的mutex是未定义的。
#include <pthread.h>
pthread_mutex_t join_mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void thread_function (void *param) {
pthread_mutex_lock(&join_mut);
pthread_cond_wait(&cond, &join_mut);
pthread_mutex_unlock(&join_mut);
/* Thread work here */
}
enum { threads = 16 };
int main() {
int i;
pthread_t thread_table[threads];
for(i = 0; i < threads; i++) {
pthread_create(&(thread_table[i]), NULL, thread_function, NULL);
}
/* Wait for all threads to be queued */
pthread_cond_broadcast(&cond);
}
For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...
最好、最小、最快、开放的来源、C/C++ 3d 提供方(在3ds max模型的支持下),而不是通用公平市价,
Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...
I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...
I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...
I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...
Is there anything other than DDD that will draw diagrams of my data structures like DDD does that runs on Linux? ddd is okay and runs, just kind of has an old klunky feeling to it, just wanted to ...
Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...