为什么阅读不是线程安全的?

Nik*_*s R 13 c++ thread-safety

我想知道为什么从内存中读取不是线程安全的.在我迄今为止看到的内容中,尤其是这个问题,从内存中读取似乎并不是线程安全的.

我已经在Python编写了一段时间,现在进入C++.我从来没有听说过Python中的读取不是线程安全的.

如果我错了请纠正我,但如果没有,请告诉我为什么从内存中读取不是线程安全的.

gbj*_*anb 19

读取是线程安全的,没有问题.....直到某些东西写入您正在读取的位置,然后......好吧,希望您在数据更改之前读取,或者在数据更改后读取(在这些情况下,没有后顾之忧,但有时候,只是当你真的不想要它时,你会在写入中途阅读,然后你将获得竞争垃圾数据.

缓解这种情况的方法是确保您只在读取之前或之后读取,这要求您检查是否正在进行写入,从而使用某种类型的同步锁定.这会使事情变慢,因为你显然是在检查锁定然后阅读而不是阅读.如果您正在使用原始数据类型(例如int),那么您可以使用CPU同步来显着提高速度.

作为fr Python,语言运行时总是可以为你同步python数据,如果不是,那么你迟早会得到相同的线程读取问题.(快速谷歌说是的,Python会遇到同样的问题,你不小心)


And*_*rew 9

如果许多线程正在读取相同的位置,那么它是线程安全的,直到没有人尝试在那里写入.

考虑线程A是否在线程B正在读取的内存中写入时读取内容.它会产生一个race condition.读取结果可能无效或从启动到启动不同


Gie*_*iel 9

从内存中读取是线程安全的,但是从可以同时写入的内存中读取并不安全.

在Python中,这不是一个问题,因为许多对象是不可变的,因此在这些情况下只修改引用,而不是内存本身.