std::互斥量是否足以实现线程间的数据同步?

Is std::mutex sufficient for data synchronization between threads

本文关键字:线程 同步 实现 数据 是否 std      更新时间:2023-10-16

如果我有一个全局数组,多个线程正在写入和读取它,并且我想确保这个数组在线程之间保持同步,那么使用std::mutex是否足以达到这个目的,如下面的伪代码所示?我偶然发现了这个资源,这让我认为答案是肯定的:

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

我仍然对别人的意见感兴趣。

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());
}

这正是互斥锁的作用。为了尽量减少争用的代价,尽量不要保留它们太久。