std :: mutex是否足以在线程之间进行数据同步

Dee*_*ner 3 c++ multithreading mutex locking c++11

如果我有一个多个线程正在读写的全局数组,并且我想确保该数组在线程之间保持同步,那么为此使用std :: mutex是否足够,如下面的伪代码所示?我遇到了这个资源,这使我认为答案是肯定的:

互斥锁(例如std :: mutex或原子自旋锁)是释放获取同步的一个示例:当锁由线程A释放并由线程B获取时,在临界区中发生的所有事情(释放之前)在执行相同关键部分的线程B(在获取之后)必须对线程A上下文可见。

我仍然对其他人的观点感兴趣。

float * globalArray;
std::mutex globalMutex;

void method1() 
{
    std::lock_guard<std::mutex> lock(globalMutex);
    // Perform reads/writes to globalArray
}

void method2() 
{
    std::lock_guard<std::mutex> lock(globalMutex);
    // Perform reads/writes to globalArray
}

main() 
{
    std::thread t1(method1());
    std::thread t2(method2());
    std::thread t3(method1());
    std::thread t4(method2());
    ...
    std::thread tn(method1());
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

这正是互斥的目的。只是尽量不要将它们保留的时间超过必要的时间,以最大程度地减少争用成本。