pthread_create是否启动线程?

函数pthread_create是否启动了线程(开始执行它的函数),还是只是创build了它并让他等待或启动的正确时刻呢?

谢谢

pthread_create创建线程(通过内部使用clone系统调用),并返回tid(线程ID,如pid)。 所以,在pthread_create返回时,至少会创建新的线程。 但是在启动时没有保证。

来自Man: 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。 有些应用程序会发现这种行为更自然。 特别是,阿达将任务的“创造”与“激活”分开。

由于许多原因,标准开发人员拒绝拆分操作:

  • 启动线程所需的调用数量将从一个增加到两个,因此给不需要额外同步的应用程序带来额外负担。 然而,第二个调用可以通过启动状态属性的额外复杂性来避免。

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

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

您可以使用RT调度; 或者只是在创建的线程中添加一些同步以获取有关它的执行的确切信息。 在某些情况下,使用pthread_setaffinity_np将线程手动绑定到特定的CPU内核也是有用的

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

它运行得多早将取决于线程的优先级,它与其他因素竞争的线程数量。