我需要为我创建的每个对象保留std::mutex
以便稍后使用。
我知道std::mutex
是不可复制的不可移动的。
我也看过这个:
我所做的是,使用std::map
(密钥)和objectID
创建objectInfo*
,并在objectInfo中使用互斥锁。
所以,因为我在地图中存储的是指向某个结构的指针,所以我没有看到std::mutex
的任何问题,如果我有std::map<int, std::mutex>
,那就会发生。{ / p>
但是,我写的代码似乎有些问题。在使用互斥锁插入代码后,有时候我会segfault
std::unique_lock::try_lock
。{/ p>
这是我在大型项目中插入的代码的最小化版本:
// Example program
#include <iostream>
#include <string>
#include <mutex>
#include <map>
#include <thread>
struct sObjectInfo {
std::mutex mut;
};
std::map<int, sObjectInfo*> mymap;
void foo() {
std::unique_lock<std::mutex> ulock(mymap[0]->mut, std::defer_lock);
if (ulock.try_lock()) {
std::cout << "locked.." << std::endl;
}
else {
std::cout << "cant lock" << std::endl;
}
}
int main()
{
sObjectInfo* s1 = new sObjectInfo();
sObjectInfo* s2 = new sObjectInfo();
mymap[0] = s1;
mymap[1] = s2;
std::thread t1(foo);
t1.join();
}
以下是实例:
在这个例子中使用互斥锁有什么问题?