小编lon*_* ma的帖子

为什么在Python中添加分号会改变结果?

我用分号"发现了奇怪的行为"; 在Python中.

>>> x=20000;y=20000
>>> x is y
True
>>> x=20000
>>> y=20000
>>> x is y
False
>>> x=20000;
>>> y=20000
>>> x is y
False
Run Code Online (Sandbox Code Playgroud)

为什么第一次测试返回"True",其他测试返回"False"?我的Python版本是3.6.5.

python

16
推荐指数
1
解决办法
613
查看次数

为什么 a+=1 是 ruby​​ 中的线程安全操作?

代码片段:

a = 0
Array.new(50){
  Thread.new {
    500_000.times { a += 1 }
  }
}.each(&:join)
p "a: #{a}"
Run Code Online (Sandbox Code Playgroud)

结果:a = 25_000_000

据我了解,(MRI) Ruby 使用 GIL,所以只有一个 ruby​​ 线程可以获得 CPU,但是当发生线程切换时,会存储一些 ruby​​ 线程的数据,以便稍后恢复线程。所以,理论上,a += 1可能不是线程安全的。

但上面的结果证明我错了。Ruby 是否具有a+=1原子性?如果为真,哪些操作可以被认为是线程安全的?

ruby multithreading thread-safety

1
推荐指数
1
解决办法
111
查看次数

标签 统计

multithreading ×1

python ×1

ruby ×1

thread-safety ×1