gpt4 book ai didi

c - 写入相同值的竞争条件是否安全?

转载 作者:行者123 更新时间:2023-12-03 12:45:10 24 4
gpt4 key购买 nike

假设我有一些使用共享内存的多线程程序,其中多个线程随机覆盖一些 的值。多字节 变量(例如 intdouble ),有时会相互碰撞(也称为竞争条件),并且也会随机读取同一变量的值。
假设所有线程 始终将相同的值写入内存地址 (例如,每个线程都执行 x = 1000 ) - 如果一个线程在另一个线程正在/正在覆盖它的确切时刻读取该变量,则 变量是否保证具有正确的值? 或者内存会以某种方式被随机的东西覆盖吗?
也就是说,如果所有线程总是写x = 1000 , 线程可以读取 x并得到 1000 以外的东西?

最佳答案

Assuming all the threads always write the same value to the memoryaddress (e.g. each thread does x = 1000) - if a thread reads thevariable at the exact moment that another thread(s) is/are overwritingit, is the variable guaranteed to have the correct value?


C 语言规范明确拒绝通过将包含竞争条件的程序的行为声明为未定义来做出这样的保证。你是对的,如果没有同步,你描述的情况是一种竞争条件,不管写入的值是否与内存的初始内容相同。

or couldthe memory somehow get overwritten with something random?


行为未定义。原则上,任何事情都可能发生,包括读取从未存储在相关位置的值。
另请注意,比赛与任何类型的客观同时性无关。相反,它是由于缺乏同步会阻止同时访问,而不管是否实际发生了任何同时访问。
在实践中,您可能会发现,在某些实现中,至少在某些情况下,不更改内存内容的写入行为就像它们彼此之间没有冲突,或者与在该值第一次写入内存之后发生的读取没有冲突。位置,其中“发生在之后”是一个技术术语,部分取决于同步。但是,我不建议依赖于这种行为。即使它被记录在案也不行。

关于c - 写入相同值的竞争条件是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65675736/

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