我有一个应用程序,其中一些 STL 容器在 3 个线程中读取,并在 2 个线程中写入。我知道多线程容器有 TBB,但它不是我的应用程序中的选项。
所以我想使用 std::mutex 和我的双手使程序线程安全。这是我所做的一个简单版本:
int readers = 0;
std::mutex write;
// One write, no reads.
void write_fun()
{
write.lock();// We lock the resource
while(readers > 0){}// We wait till everyone finishes read.
// DO WRITE
write.unlock();// Release
}
// Multiple reads, no write
void read_fun()
{
// We wait if it is being written.
while(!write.try_lock()){}
write.unlock();
readers++;
// do read
readers--;
}
这是在 C++11 中执行此操作的正确方法吗?