我有問題習慣了線程編程。我試圖用互斥和鎖構建一個構造。但我需要boost :: condition_variable :: wait兩個鎖作爲參數。但是沒有兩個鎖的等待功能。boost condition_variable等待多個鎖
有沒有人給我提示,或者我的方法完全錯誤?
我的目標是
- 允許同時添加(),全部寫入緩衝區
- 工作者線程運算符()(),存儲緩衝值
- 和搜索(),等待在搜索之前的工作線程
class Archive
{
vector externalBuffer;
vector swapBuffer;
vector internalBuffer;
boost::mutex externalBufferMutex;
boost::mutex allBufferMutex;
boost::condition_variable bufferIsFilledConditionVariable;
void operator()()
{
unique_lock allBufferLock(allBufferMutex);
while(true)
{
{
unique_lock lock(externalBufferMutex);
while(buffer.empty())
{
bufferIsFilledConditionVariable.wait(...); // I should call it with two locks?
}
externalBuffer.swap(swapBuffer);
}
{
internalBuffer.swap(swapBuffer);
// store values from internalBuffer
...
internalBuffer.clear();
}
}
}
void add(value) // pseudo code here
{
{
lock_guard lock(externalBufferMutex);
externalBuffer.push_back(value);
}
bufferIsFilledConditionVariable.notify_one();
}
// search will not be used concurrently with add()
// it should just wait for the worker thread
someReturnValue search()
{
unique_lock lock(allBufferMutex);
// search here
...
}
}
請詳細說明你的問題:是什麼內部緩衝區發生?它被搜查?何時和誰使用內部緩衝區中的數據?爲什麼你需要3個緩衝區?它提醒了古典生產者/消費者模式,除非我們沒有看到消費者 – 2014-10-29 11:03:32