2015-09-24 65 views
1

如果我有一个全局数组,多个线程正在写入和读取,并且我想确保此数组在线程之间保持同步,正在使用std :: mutex足够多为此,如下面的伪代码所示?我碰到一个this resource,这让我觉得答案是肯定的:是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()); 
} 
+4

是的。 'std :: mutex'用于同步 – NathanOliver

+1

那么,您是否会猜测您在cppreference上阅读的所有内容?作为一般规则(尽管有一些偏差,但你会很难找到那些),cppreference是非常可靠和可靠的证据来源。通常它是StackOverflow上的最终仲裁者,而不是其他方式;) – SergeyA

回答

4

这正是互斥体的用途。只要尽量不要超过必要时间,以减少争用成本。

相关问题