如果我有一个全局数组,多个线程正在写入和读取该数组,并且我希望确保在线程之间保持同步,那么像下面伪代码中所示使用std::mutex是否足够?我遇到了这个资源,它让我认为答案是肯定的:这个资源。
互斥锁(如std::mutex或原子自旋锁)是释放-获取同步的一个例子:当线程A释放锁并被线程B获取时,在执行相同的关键部分的线程B(在获取之后)必须看到在线程A的上下文中发生的所有事情(在释放之前)。
我仍然对其他人的意见感兴趣。
互斥锁(如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());
}
std::mutex
用于同步。 - NathanOliver