相关疑难解决方法(0)

C++ 11多重读取和一个写入线程互斥

我有一个应用程序,其中一些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中执行此操作的正确方法吗?

c++ multithreading c++11

24
推荐指数
2
解决办法
3万
查看次数

unordered_map线程安全

我正在使用boost:thread库将单个线程程序更改为多线程.该程序使用unordered_map作为hasp_map进行查找.我的问题是......

有一次,很多线程都会写入,而另一些线​​程会读取,但不会同时读取和写入,即所有线程都将读取或者所有线程都将写入.这是线程安全的和为此设计的容器吗?如果它会,它真的会并发并提高性能吗?我需要使用一些锁定机制吗?

我在某处读到C++标准说行为将是未定义的,但这就是全部吗?

更新:我还在考虑英特尔concurrent_hash_map.这是一个不错的选择吗?

c++ multithreading boost hashmap thread-safety

22
推荐指数
3
解决办法
3万
查看次数

标签 统计

c++ ×2

multithreading ×2

boost ×1

c++11 ×1

hashmap ×1

thread-safety ×1