我启动3个pthreads,在运行我的应用程序几次后,我发现根据create语句的顺序没有确切的线程创建顺序。
一旦某个线程启动,如何创建另一个线程?
我仍然希望从相同的“级别”创建线程,而不是从我想要首先启动的线程内创建所需的线程。
答案 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创建一个线程,正如您所发现的,它不会调用线程函数。基本上你的新线程在活动线程列表上,并且调度程序可以在它选择时给它一个时间片。通常这是几毫秒,但可能更长。