如何确保不同核心/处理器上的缓存在任何时刻都彼此同步。例如:
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.
}
}
期望的行为是我们希望两个线程尽可能地同步。
答案 0 :(得分:1)
如果您要同步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();
}
每次在您想要使用特定资源之前锁定特定互斥锁,并在完成后解锁它,确保您对该资源上的操作进行同步。