我有一个应用程序,其中一些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--;
}
Run Code Online (Sandbox Code Playgroud)
这是在C++ 11中执行此操作的正确方法吗?
我正在使用boost:thread库将单个线程程序更改为多线程.该程序使用unordered_map作为hasp_map进行查找.我的问题是......
有一次,很多线程都会写入,而另一些线程会读取,但不会同时读取和写入,即所有线程都将读取或者所有线程都将写入.这是线程安全的和为此设计的容器吗?如果它会,它真的会并发并提高性能吗?我需要使用一些锁定机制吗?
我在某处读到C++标准说行为将是未定义的,但这就是全部吗?
更新:我还在考虑英特尔concurrent_hash_map.这是一个不错的选择吗?