在pthread_join()中阻塞【JAVA教程】

!
也想出现在这里? 联系我们
信息

在pthread_join()中阻塞,第1张

概述在pthread_join()中阻塞

根据手册页面:

除非目标线程已经终止,否则pthread_join()函数应暂停执行调用线程直到目标线程终止。

所以,据我所知,调用进程将阻塞,直到指定的线程退出。

现在考虑下面的代码:

shell_notifyicon:试图引用一个不存在的标记,没有显示图标

如何从Web浏览器控制在WPF / windows中获取滚动宽度c#

窗口应用程序崩溃

将一些代码从C ++转换为C

替代Getwindowmodulefilename获取其他进程Applicationfilename?

pthread_t thrs[NUMTHREADS]; for (int i = 0; i < NUMTHREADS; i++) { pthread_create(&thrs[i],NulL,thread_main,NulL); } pthread_join(thrs[0],NulL); /* will be blocked here */ pthread_join(thrs[1],NulL); pthread_join(thrs[2],NulL); /* … */ pthread_join(thrs[NUMTHREADS – 1],NulL);

在调用pthread_join(thrs[0],NulL) ,调用线程将被阻塞,直到thrs[0]以某种方式退出。 但是,如果另一个线程(例如thrs[2] pthread_exit()在pthread_join(thrs[0],NulL)调用中被阻塞时调用pthread_join(thrs[0],NulL) ? 我们是否必须等待thrs[0]退出以获得thrs[2]的返回值?

如果一个线程正在等待一个互斥量,信号是否被捕获?

我可以通过使用内存映射文件的指针吗?

睡眠| 警告隐式声明函数“睡眠”?

OpenGL ES 2如何渲染纹理并为GPGPUtesting提取数据

用于反汇编C ++可执行文件的最好的linux工具

是的 – 在thrs[[0]和thrs[1]退出的thrs[0]上的主线程将不会得到thrs[2]的结果。

如果你需要更多的灵活性,一个选择是做一些事情,比如让线程把结果放在一个队列中,或者以某种其他方式发出线程需要加入的信号。 主线程可以监视该队列/信号,并获得必要的结果(可能来自在线程上完成的pthread_join() ,该线程已知从队列/信号中的信息完成)。

但是,如果另一个线程,如thrs [2],如果我们被阻止在pthread_join(thrs [0],NulL)调用中被阻塞,如何呢?

是的,可能会发生。 在这种情况下, pthread_join(thrs[2],NulL); 将立即返回。

我们是否必须等待thrs [0]退出以获得thrs [2]的返回值?

是的,你必须等待thr[0]终止。

(与问题没有直接关系)

没有必要在你创建的每个线程上调用pthread_join() 。 从线程获取返回状态是一个方便的函数。 如果你不需要知道线程的终止状态,你可以通过选择“detached”属性来创建线程,或者调用pthread_detach(pthread_self()); 从线程本身,使其分离。 在某些情况下,您希望创建的线程继续执行,但不再需要主线程。 在这种情况下,你可以调用pthread_exit(NulL); 从主线程,即使在主线程退出之后,也会让其他线程继续运行。

是。 代码是以串行方式执行的。

总结

以上是内存溢出为你收集整理的在pthread_join()中阻塞全部内容,希望文章能够帮你解决在pthread_join()中阻塞所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞51 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容