假设我使用的是signal
处理间歇计时器的处理程序。
def _aHandler(signum, _):
global SomeGlobalVariable
SomeGlobalVariable=True
我能设置SomeGlobalVariable
不用担心,在不太可能的情况下SomeGlobalVariable
(即PythonVM正在执行字节码来设置变量),信号处理程序中的赋值会破坏什么?元稳定州)
更新::我特别感兴趣的是“复合转让”是在处理程序之外进行的。
(也许我想的是“低层次”,这都是在Python中处理的...来自嵌入式系统背景,我不时会有这样的冲动)
发布于 2018-03-15 14:17:48
简单变量的简单赋值是“原子”AKA线程安全(复合赋值,如+=
或者不需要为对象的项或属性分配,但是您的示例是一个简单的赋值,尽管是全局变量,因此是安全的)。
发布于 2018-03-15 14:37:10
复合作业包括三个步骤:读-更新-写。如果另一个线程在读取发生后,但在写入之前,运行另一个线程并将一个新值写入位置,则这是一个争用条件。在这种情况下,一个陈旧的值正在被更新并写回,这将打击其他线程编写的任何新值。在Python中,任何涉及执行单个字节代码的内容都应该是原子的,但是复合赋值不符合这个条件。用锁。
https://stackoverflow.com/questions/-100003620
复制相似问题