std :: mutex是否足以在线程

时间:2015-09-24 22:05:47

标签: c++ multithreading c++11 locking mutex

如果我有一个多线程正在写入和读取的全局数组,并且我想确保这个数组在线程之间保持同步,那么使用std :: mutex就足够了,如下面的伪代码所示?我遇到了this resource,这让我觉得答案是肯定的:

  

互斥锁(例如std :: mutex或atomic spinlock)是发布 - 获取同步的一个示例:当线程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());
}

1 个答案:

答案 0 :(得分:5)

这正是互斥体的用途。只是尽量不要持有它们,以尽量减少争用成本。