多线程中join()的机制

时间:2015-03-17 15:21:40

标签: multithreading

我正在研究多线程并遇到join()

据我所知,在线程上使用join()会使进程等待,直到'join'线程终止。例如,在t1.join()中调用main会使main等待,直到线程t1中的作业完成并且t1终止。

我很好奇函数join()如何使这成为可能 - 它如何使当前线程在函数内被“阻塞”? join()是否首先强制执行连接的线程,以便任何其他线程应该等到该线程终止?或者,是否有一些方法可以在两个线程(调用join()的线程和已连接的线程)之间进行通信?

我将等待答案。非常感谢!

2 个答案:

答案 0 :(得分:0)

为了能够加入你需要能够等待一些事件。然后加入看起来像这样:

function join(t : Thread)
    // do this atomically
    if already done
        return
    wait on termination event of t
end

等待可以通过以下两种方式之一完成:

  1. 循环并定期检查事件是否已发生(忙碌等待)
  2. 让系统回收线程的资源并在系统事件中被唤醒,在这种情况下,唤醒线程由OS的调度程序管理

答案 1 :(得分:0)

它特定于语言。

一旦你create一个线程,它就会开始运行。

join操作是指主进程停止并等待线程退出并捕获返回代码。它会阻塞直到你的线程完成 - 这是重点,因为它允许同步发生 - 你的程序中的所有东西都处于已知的状态'。

相关的是detach操作,它实际上是在说“我不再关心”。