【发布时间】:2014-06-15 00:04:45
【问题描述】:
3 个线程:
pthread_create(&thread1,
&NULL,
Thread1,
NULL);
pthread_create(&thread2,
&NULL,
Thread2,
NULL);
pthread_create(&thread3,
&NULL,
Thread3,
NULL);
printf("\n\nThreads Created\n");
pthread_join(thread1,0);
printf("Joined Thread1\n");
pthread_join(thread2,0);
printf("Joined Thread2\n");
pthread_join(thread3,0);
printf("Joined Thread3\n");
这 3 个线程运行了一段时间,根据控制台的输出,似乎正在工作。
最终,线程 1 和 2 在完成工作后死亡(显示正确,因为 maint() "Joined Thread 1/2" 的输出显示)
现在,线程 3 仍有一些工作要做,看起来不错。然后,接近处理它的最后几项,它“出现”线程 3 刚刚挂起。它会在控制台上打印一些东西,甚至不会完成句子。
线程 3 有一个小睡眠、互斥锁的锁定和解锁(线程 1 和 2 正在使用)和条件等待。似乎没有处于条件等待状态,因为我在调用它之前直接打印出来并且看不到它。
好像是休眠了,放弃了CPU却再也回不来了.....?
还有其他可能性或原因吗?
有什么解决办法吗?
谢谢。
【问题讨论】:
-
其实,可能就是这样。在您等待之前,可能没有刷新标准输出。在等待这种情况之前,您可以
fflush()打印到哪个流吗? -
如果不是太复杂,或者至少是相关部分,您能否发布线程 1、2 和 3 的代码?
-
@iwillnotexist-idonotexist:好的,让我检查一下等待并在它之前尝试刷新,我不打算发布代码....
-
只需锁定/解锁/等待逻辑就足够了。
-
糟糕。应该在发帖前做我的研究。见这里:stackoverflow.com/questions/5229096/…。它似乎对我来说大部分时间都有效,但显然并不总是有效。
标签: c linux multithreading ubuntu posix