1

我需要评估 if 条件,但我需要小心其他线程可能修改变量。

我的解决方案是

array.each do |anything|
    if (mutex.synchronize do shared_var <= my_var end)
        next
    end
end

它似乎工作。if但是语句检查到底是什么?那么这个其他代码呢?

array.each do |anything|
    mutex.synchronize do
        if shared_var <= my_var
            next
        end
    end
end

它们是等价的吗?next即使内部包含在互斥锁中,内部是否也能完成工作?为什么?

看看结构,我只展示了与我的问题相关的程序部分。

4

1 回答 1

1

if但是语句检查到底是什么?

synchronize返回传递给它的块返回的任何内容,因此该if语句最终是检查shared_var <= my_var.

那么这个其他代码呢?

我认为这里的语句检查的内容是不言自明的if,与上面相同。

它们是等价的吗?

不。

next即使内部包含在互斥锁中,内部是否也能完成工作?

不,这就是为什么它们不等价的原因。当next在调用的块内被调用synchronize时,它next在该块中(不是foreach),这相当于return这里,因为没有“下一个”。当它该块之外时,它会超出您期望next的实际外部块( )。foreach

因此,您可能需要第一个代码块。

于 2012-06-15T02:42:20.790 回答