我启动3个pthread并在运行我的应用程序几次后,我发现根据创建语句的顺序没有确切的线程创建顺序。启动另一个正在运行的线程
一旦某个线程启动后,如何创建另一个线程?
我仍然想从同一个“级别”创建线程,而不是从线程内部创建所需的线程,我想先从头开始。
我启动3个pthread并在运行我的应用程序几次后,我发现根据创建语句的顺序没有确切的线程创建顺序。启动另一个正在运行的线程
一旦某个线程启动后,如何创建另一个线程?
我仍然想从同一个“级别”创建线程,而不是从线程内部创建所需的线程,我想先从头开始。
也许你可以找到有趣的pthread信号并等待条件变量。 下面是一些例子和解释。 https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal
线程没有“级别”或父/子关系。包括初始线程主线程在内的所有线程都是对等体。只要线程描述符有效且线程未分离,任何线程都可以在任何其他线程上调用pthread_join
。
如果确实需要执行排序,最简单的工具是障碍(pthread_barrier_wait
)。另一方面,条件变量更强大,但更难使用,并且可能不需要这种情况。
如果你的平台支持它,我相信semget(),semop(),semctl()应该处理这个。只需要让主进程线程创建并等待一个信号量,并且一旦适合序列中下一个线程的生成,每个线程都会有semop()信号量。
参见:http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr2/z2101576.htm
是否可以从线程函数调用调用pthread_create()?
pthread_create创建一个线程,并且正如您发现的那样,它不会调用线程函数。基本上,您的新线程位于活动线程列表中,并且调度程序可以在它选择时给它一个时间片。通常这是几个毫秒,但可以更长。
获取线程开始设置并发对象,然后等待主线程。一旦设置完成,你就知道第一个线程已经启动,你可以开始第二个线程等等。 – forsvarir 2011-04-23 18:50:50
线程的内在本质不是顺序确定的,你应该重新安排你的代码,以便它不重要! – Kevin 2011-04-23 19:06:47