【发布时间】:2018-09-16 01:52:06
【问题描述】:
我正在编写一个代码,其中我让我的线程等到我执行 pthread_cond_broadcast。我在这段代码中有三个线程。线程 line2_thread 和 line3_thread,按照它们应该运行的优先级顺序运行。然而,我的第三个线程甚至没有进入它的线程函数(line4_thread)。谁能告诉我为什么我的 main() 不能调用我的 line4_thread ? pthread_cond_t 开始; pthread_mutex_t sstart_mutex;
void *l3_thread(void *arg){
pthread_mutex_lock(&sstart_mutex);
pthread_cond_wait(&sstart, &sstart_mutex);
pthread_mutex_unlock(&sstart_mutex);
/*do something*/
pthread_exit(NULL);
}
void *l2_thread(void *arg){
pthread_mutex_lock(&sstart_mutex);
pthread_cond_wait(&sstart, &sstart_mutex);
pthread_mutex_unlock(&sstart_mutex);
/*do something*/
pthread_exit(NULL);
}
void *l4_thread(void *arg){
pthread_mutex_lock(&sstart_mutex);
pthread_cond_wait(&sstart, &sstart_mutex);
pthread_mutex_unlock(&sstart_mutex);
/*do something*/
pthread_exit(NULL);
}
int main(){
pthread_cond_init(&sstart, NULL);
//thread creation
pthread_cond_broadcast(&sstart);
pthread_cond_destroy(&sstart);
pthread_mutex_destroy(&sstart_mutex);
return 0;
}
【问题讨论】:
-
你能显示 attr_for_line4 声明以及它是如何设置的吗?
-
另外,你的加入...是否有可能 main 在 line4 有机会运行之前退出?
-
pthread_t line4; pthread_attr_t attr_for_line4; int prio_line4 = 30;结构 sched_param p_line4; pthread_attr_init (&attr_for_line4); temp_line4 = pthread_attr_getschedparam (&attr_for_line4, &p_line4); p_line4.sched_priority = prio_line4; pthread_attr_setschedparam (&attr_for_line4, &p_line4); pthread_attr_setschedpolicy(&attr_for_line4, SCHED_FIFO);
-
即使我在其他两个之前调用line4_thread,它也不会只进入函数。
-
可能是因为您遇到了死锁。 this question 包含更多信息
标签: c multithreading pthreads mutex thread-synchronization