我有關於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()。 –
但沒有數據以共享方式被訪問?每個線程都有自己的數據成員,它操縱。我希望他們以非互斥的方式運行。我只是希望他們等到主線程說他們可以繼續前進 –