一旦另一个运行就启动线程

时间:2011-04-23 18:47:17

标签: c pthreads

我启动3个pthreads,在运行我的应用程序几次后,我发现根据create语句的顺序没有确切的线程创建顺序。

一旦某个线程启动,如何创建另一个线程?

我仍然希望从相同的“级别”创建线程,而不是从我想要首先启动的线程内创建所需的线程。

4 个答案:

答案 0 :(得分:1)

线程没有“级别”或父/子关系。包括初始线程主运行在内的所有线程都是对等体。只要线程描述符有效并且线程没有分离,任何线程都可以在任何其他线程上调用pthread_join

如果确实需要强制执行排序,那么最简单的工具就是障碍(pthread_barrier_wait)。另一方面,条件变量更强大,但更难使用,并且可能不需要这种情况。

答案 1 :(得分:0)

也许你可以找到有趣的pthread信号并等待条件变量。 以下是示例和说明。 https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal

答案 2 :(得分:0)

如果你的平台支持它,我相信semget(),semop(),semctl()应该处理这个。只需要让主进程线程创建并等待信号量,并且一旦它适合于生成序列中的下一个线程,就让每个线程semop()成为信号量。

请参阅:http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr2/z2101576.htm

答案 3 :(得分:0)

你能从线程函数调用pthread_create()吗?

pthread_create创建一个线程,正如您所发现的,它不会调用线程函数。基本上你的新线程在活动线程列表上,并且调度程序可以在它选择时给它一个时间片。通常这是几毫秒,但可能更长。