【发布时间】:2016-10-19 08:49:21
【问题描述】:
我已经通过pthread_create 创建了 4 个线程。我希望它们同时开始运行,所以我在线程过程的最开始添加sem_wait(&sem)。在主线程中,我可能会使用这样的东西,但我认为这不是一个好的解决方案:
for (int i = 0; i < 4; i++)
{
sem_post(&sem);
}
我用谷歌搜索并找到了pthread_cond_t。但是,pthread_cond_broadcast 只能唤醒当前正在等待的线程。即使我把pthread_cond_wait放在程序的最开始,仍然不能保证pthread_cond_wait在pthread_cond_broadcast之前被调用(在主线程中)。
为了避免这种情况,我必须添加很多额外的代码来确保wait和broadcast的调用顺序,这也很不聪明。
那么,有没有一种简单的方法来“排列”所有线程(让它们同时开始运行)?
貌似有sem_post_multiple,不过是pthread中的win32扩展。但是,我使用的是 Linux (Android)。
【问题讨论】:
标签: c++ multithreading pthreads