加入线程(阻塞调用线程直到线程终止)和普通函数调用有啥区别

Posted

技术标签:

【中文标题】加入线程(阻塞调用线程直到线程终止)和普通函数调用有啥区别【英文标题】:What is the difference between a joined thread (blocks the calling thread until thread is terminated) and a normal function call加入线程(阻塞调用线程直到线程终止)和普通函数调用有什么区别 【发布时间】:2015-03-04 10:27:27 【问题描述】:

我最近一直在研究线程和线程管理,我发现有些东西让我感到困惑,那就是连接线程和普通函数调用有什么区别?

已经加入的线程会阻塞调用线程,这和函数调用的功能不一样吗?

【问题讨论】:

在线程创建和join之间,调用线程可以做其他事情。对于函数调用,情况并非如此。 【参考方案1】:

当你调用 .join 时它会阻塞。在创建线程和 thread.join 之间,您可以调用许多函数。从图表上看,它看起来像这样:

main-thread
|
new thread() ----
|               |
|               f'()
f1()            |
|               | 
f2()            | 
|               f''()
f3()            |
|               |
thread.join -----

【讨论】:

【参考方案2】:
    使用 thread.join(),您可以进行定时等待。所以你可以决定如何 等待时间很长,这在正常的函数调用中是不会出现的。 其他一些线程可以中断等待的线程。 thread.join() 显然看起来像是将函数执行放入 序列,但从技术上讲,涉及两个不同的线程 这里。所以线程本地对象/资源仍然没有在它们之间共享。

【讨论】:

【参考方案3】:

如果您只是为了立即加入线程而分离线程,那么您不应该使用线程。

使用线程的好处是你可以让线程完成它的工作,离开并做更多的处理,然后当你真正需要结果时调用join

【讨论】:

以上是关于加入线程(阻塞调用线程直到线程终止)和普通函数调用有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

pthread_kill()vs pthread_cancel()终止阻塞I / O的线程

java多线程--中断线程

线程池设计

远程主机终止后,Recv() 调用挂起

C ++线程未加入“没有活动异常的终止调用”

java的线程中断