std::mutex是否足够进行线程间数据同步?

3
如果我有一个全局数组,多个线程正在写入和读取该数组,并且我希望确保在线程之间保持同步,那么像下面伪代码中所示使用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());
}

5
好的,std::mutex 用于同步。 - NathanOliver
1
你会对cppreference上的所有内容都持怀疑态度吗?一般来说(虽然有些例外,但你很难找到这些例外),cppreference是非常可靠和权威的证据来源。通常它是StackOverflow的最终仲裁者,而不是反过来的。 ;) - SergeyA
1个回答

5

这正是互斥锁的用途。只需尽量不要持有它们,以最小化争用成本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接