gpt4 book ai didi

线程之间可以安全地共享整数吗?

转载 作者:太空狗 更新时间:2023-10-29 17:09:06 26 4
gpt4 key购买 nike

在没有任何同步实用程序的 C 程序中,多个线程在 pthread 之间使用相同的整数内存位置是否存在问题?

为了简化问题,

  • 只有一个线程会写入整数
  • 多线程读取整数

这个伪C说明了我的想法

void thread_main(int *a) {
//wait for something to finish
//dereference 'a', make decision based on its value
}

int value = 0;

for (int i=0; i<10; i++)
pthread_create(NULL,NULL,thread_main,&value);
}
// do something
value = 1;

我认为它是安全的,因为一个整数占用一个处理器字,读/写一个字应该是最原子的操作,对吧?

最佳答案

您的伪代码不安全。

虽然访问字长整数确实是原子的,这意味着您永远不会看到中间值,但无论是“写入前”还是“写入后”,这对于您概述的算法来说是不够的。

您依赖于写入 a 的相对顺序并进行一些其他更改来唤醒线程。这不是原子操作,现代处理器无法保证。

您需要某种内存栅栏来防止写入重排序。否则不能保证其他线程永远看到新值。

关于线程之间可以安全地共享整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4588915/

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