【发布时间】:2016-04-30 23:58:14
【问题描述】:
有没有办法让它在其他线程不锁定其他功能时让 n 个线程运行某个功能?
我想达到这样的目标:
pthread_t threadID[10];
pthread_mutex_t blocking;
pthread_mutex_init(&blocking, NULL);
pthread_cond_t go;
pthread_cond_init(&go, NULL);
void * function1() {
pthread_mutex_lock(&blocking); // Only one thread at a time!
// Do some work
pthread_cond_broadcast(&go);
pthread_mutex_unlock(&blocking);
}
void * function2() {
pthread_cond_wait(&go, NULL); // Imagine 5 threads waiting here.
// Does some work too!
}
我想要的基本上是 n 个线程运行 function2,而 function1 中没有运行线程。
我不希望锁定 function2,因为线程可能会毫无问题地同时执行它,所以我知道 pthread_cond_wait(&go, NULL) 将不起作用(即使 NULL 参数也有点傻)。此外,广播将向所有等待线程发出信号,但只有其中一个线程会到达关键代码部分。我的目标是用信号解锁所有线程,并允许所有这些线程执行代码。
我知道有一些方法可以在不进入线程锁定机制的情况下执行此操作(例如在 function1 中修改变量,并且 function2 必须在允许线程前进之前检查其值),但我想知道是否有办法互斥锁和条件变量,而不是信号量。
【问题讨论】:
标签: c multithreading concurrency