如何确保不同内核/处理器上的缓存在任何时刻都是同步的。例如:
Thread 1:
while(1) {
a++;
}
Thread 2:
While(1) {
if(a%2 == 0) {
// do something
}
}
在线程2中,当试图访问a时,a不会反映最新的值。这种使用锁的实现是正确的解决方案吗?:
Thread 1:
while(1) {
a++;
}
Thread 2:
while(1){
lock();
unlock();
if(a%2 == 0) {
// do something.
}
}
期望的行为是我们希望两个线程尽可能地同步。
如果你想同步a++;
和if(a % 2 == 0) { /* do something */ }
,你应该试试这个:
std::mutex mtx;
// Thread 1:
while(1) {
mtx.lock();
a++;
mtx.unlock();
}
// Thread 2:
while(1){
mtx.lock();
if(a%2 == 0) {
mtx.unlock();
// do something.
}
mtx.unlock();
}
每次在你想要使用一个特定的资源之前锁定一个特定的互斥锁,并在你完成时解锁它,确保你对该资源的操作是同步的。