我有一个应用程序,其中一些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中正确的做法吗?
lock_guard
和shared_lock
上使用了错误的互斥类型(应该是std::shared_mutex
)。此外,这里有一个参考实现: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2406.html#shared_mutex_imp。 - Howard Hinnantstd::shared_mutex
是(将会)在 C++17 中出现,而不是 C++14。 - Messa