案例是:有多个(比如n ^ 2)pthreads都来自同一个函数。 id为零的Pthread是master。 每个pthread(除零之外)都有一个for循环,运行n次
for(j=0;j<n;j++)
{ pthread_mutex_lock(&conditionmutex);
pthread_cond_wait(&cv,&conditionmutex);
pthread_mutex_unlock(&conditionmutex);
do something;
}
对于线程零,它是
for(j=0;j<n;j++)
{ pthread_cond_broadcast(&cv);
do something else;
}
我预计每个pthread(非零)将在for循环开始时等待。 线程零将发出信号然后所有其他线程将“做某事” 然后在循环开始时再次等待j的递增值。 我的程序在开始时陷入困境。 无法找出原因。
感谢。
PS:cv是条件变量初始化为NULL,类似于互斥变量'conditionmutex'。
pthread_cond_t cv;
pthread_cond_init(&cv, NULL);
pthread_mutex_init(&conditionmutex, NULL);
我在为函数循环之前设置了n ^ 2个线程的障碍。 这可确保创建所有线程并在循环之前等待。
我想知道 - 如果我的方法还可以吗?