pthread_create是否有起始线程?

时间:2014-04-14 03:54:05

标签: c linux multithreading pthreads posix

函数" pthread_create" 是否启动线程(开始执行其功能),或者它只是创建了他并让他等待或正确的时刻到开始?

感谢

2 个答案:

答案 0 :(得分:5)

pthread_create创建线程(在内部使用clone系统调用),并返回tid(线程ID,如pid)。因此,在pthread_create返回时,至少会创建新线程。但是,当它开始时,没有任何保证。

来自男人: http://man7.org/linux/man-pages/man3/pthread_create.3.html

  

除非是实时调度策略    在调用pthread_create()后,它正在被使用    不确定哪个线程 - 调用者或新线程 - 接下来    执行。

POSIX在pthread_create http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html

的信息性说明中有类似的评论
  

在新创建的线程开始执行之前,对实现没有要求创建的线程的ID可用。

还有很长的基本原理"为什么pthread_create是没有单独的线程创建和start_execution的单步过程(就像在旧的Java时代一样):

  

pthread_create()的建议替代方法是定义两个单独的操作:create和start。一些应用程序会发现这种行为更自然。尤其是阿达,将创造和创造分开。来自"激活"。

的任务      

标准开发人员拒绝拆分操作有很多原因:

     
      
  • 启动线程所需的调用次数将从1增加到2,从而给不需要额外同步的应用程序带来额外负担。但是,第二次调用可以通过启动状态属性的额外复杂性来避免。

  •   
  • 将引入额外的状态:"已创建但未启动"。这将要求标准在目标尚未开始执行时指定线程操作的行为。

  •   
  • 对于那些需要此类行为的应用程序,可以使用当前提供的工具模拟两个单独的步骤。 start_routine()可以通过等待由启动操作发出信号的条件变量来进行同步。

  •   

您可以使用RT调度;或者只是在创建的线程中添加一些同步,以获得有关它的执行的确切信息。在某些情况下,使用pthread_setaffinity_np

手动将线程绑定到特定CPU内核也很有用

答案 1 :(得分:4)

它创建线程并进入就绪队列。当它从调度程序获得切片时,它开始运行。

运行的早期将取决于线程的优先级,没有与其他因素竞争的线程。