发布后my solution关于我自己的内存问题,nusi suggested that my solution lacks locking .
以下伪代码以一种非常简单的方式模糊地表示了我的解决方案。
std::map<int, MyType1> myMap;
void firstFunctionRunFromThread1()
{
MyType1 mt1;
mt1.Test = "Test 1";
myMap[0] = mt1;
}
void onlyFunctionRunFromThread2()
{
MyType1 &mt1 = myMap[0];
std::cout << mt1.Test << endl; // Prints "Test 1"
mt1.Test = "Test 2";
}
void secondFunctionFromThread1()
{
MyType1 mt1 = myMap[0];
std::cout << mt1.Test << endl; // Prints "Test 2"
}
我完全不确定如何实现锁定,我什至不确定我为什么要这样做(请注意,实际的解决方案要复杂得多)。有人可以解释一下在这种情况下我应该如何以及为什么要实现锁定吗?
最佳答案
一个函数(即线程)修改映射,两个读取它。因此,读取可能会被写入中断,反之亦然,在这两种情况下,映射都可能已损坏。你需要锁。
关于c++ - 在 C++ 中使用 pthreads 时什么时候需要实现锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731141/