我有关于C++多线程的问题。我有一个场景如下如何在不进行轮询的情况下等待线程?
void ThreadedRead(int32_t thread_num, BinReader reader) {
while (!reader.endOfData) {
thread_buckets[thread_num].clear();
thread_buckets[thread_num] = reader.readnextbatch()
thread_flags[thread_num] = THREAD_WAITING;
while (thread_flags[thread_num] != THREAD_RUNNING) {
// wait until awakened
if (thread_flags[thread_num] != THREAD_RUNNING) {
//go back to sleep
}
}
}
thread_flags[thread_num] = THREAD_FINISHED;
}
没有上述代码段写入或访问线程之间共享的内存。每个线程都分配了一个thread_num和一个可用于读取数据的唯一读取器对象。
我想让主线程能够通知处于THREAD_WAITING状态的线程,他的状态已经改回到THREAD_RUNNING,他需要做一些工作。我不想让他继续投票他的状态。
我了解条件变量和互斥锁可以帮助我。但我不知道如何使用它们,因为我不想获取或需要锁定。 mainthread毯子如何通知所有等待的线程,他们现在可以自由阅读更多数据?
编辑: 万一有人需要更多的细节
1)阅读器读取一些文件 2)thread_buckets是UINT16 3向量的向量)threadflags是INT矢量
他们都已适当调整大小
只需使用一个条件变量,需要您的简历锁,因为调用cv.wait以外的情况下可能发生的数据竞争( )或cv.notify()。 –
但没有数据以共享方式被访问?每个线程都有自己的数据成员,它操纵。我希望他们以非互斥的方式运行。我只是希望他们等到主线程说他们可以继续前进 –