gpt4 book ai didi

Ruby 在 semaphore.synchronize block 中返回

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:48 26 4
gpt4 key购买 nike

我想知道如果我这样做,信号量是否会释放锁:

def test
semaphore.syncronize do
if (access_shared_resource)
return "Condition A"
else
return "Condition B"
end
end
end

运行这个函数的线程会继续持有这个锁直到它终止吗?或者 return 语句会释放锁吗?

最佳答案

根据文档,它会在完成 block (传递给 syncronize 的 block )后释放: https://ruby-doc.org/core-2.5.0/Mutex.html#method-i-synchronize

为了在这个答案被否决时提供更多证据,这里是同步的实现。我不是 C 专家,但从我在这里看到的情况来看,解锁是在 ensure 中实现的,所以这个互斥量将在 block 终止时解锁,无论它是返回还是通过跳转离开: https://github.com/ruby/ruby/blob/2cf3bd5bb2a7c4724e528577d37a883fe80a1122/thread_sync.c#L512

快速建模也支持这一点: https://repl.it/repls/FailingWearableCodewarrior

关于Ruby 在 semaphore.synchronize block 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904215/

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