如果我有一个多线程正在写入和读取的全局数组,并且我想确保这个数组在线程之间保持同步,那么使用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());
}
答案 0 :(得分:5)
这正是互斥体的用途。只是尽量不要持有它们,以尽量减少争用成本。