c++ - 在 C++ 中使用 pthreads 时什么时候需要实现锁定?

标签 c++ locking pthreads

发布后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/

相关文章:

c++ - C++ IntAtomicGet、GotW 的原因

c - 多种资源的细粒度锁定算法

sql - 查询中的锁定顺序(postgresql)

c - 缓冲区不从线程执行的函数 - 适用于 Linux 而不适用于 OS X

c++ - 如何使用 C++ 提取由空行分隔的行并将其存储为数组

c++ - C++参数包类型扩展

c - pthread_join 中的段错误

linux - Linux 上的 pthread_mutex_timedlock

c++ - 使用 clCreateFromGLTexture 的 opencl/opengl 互操作无法绘制到纹理(纹理黑色)

c# - lock关键字的使用c#