gpt4 book ai didi

multithreading - 在多核系统上的多线程程序中同步缓存

转载 作者:行者123 更新时间:2023-12-02 03:12:58 25 4
gpt4 key购买 nike

如何确保不同内核/处理器上的缓存在任何时刻都相互同步。例如:

Thread 1:
while(1) {
a++;
}

Thread 2:
While(1) {
if(a%2 == 0) {
// do something
}
}

在线程 2 中,当试图访问 a 时,a 不会反射(reflect)最新的值。这种使用锁的实现是正确的解决方案吗? :

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();
}

每次要使用特定资源之前锁定特定的互斥量,并在使用完毕后解锁,确保同步对该资源的操作。

关于multithreading - 在多核系统上的多线程程序中同步缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com