gpt4 book ai didi

ruby - 通过推送通知唤醒

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

假设:

  • 有一些对象(例如数组 a)和依赖于对象的条件(例如 a.empty?)。
  • 当前线程以外的一些线程可以操作对象(a),因此条件评估值的真实性会随着时间的推移而变化。

如何让当前线程在代码中的某个时刻休眠,并在条件满足时通过推送通知继续(唤醒)?

我不想像这样进行投票:

...
sleep 1 until a.empty?
...

也许使用 Fiber 会是一个线索。

最佳答案

也许我不太明白你的问题,但我想 ConditionVariable 是解决此类问题的好方法。

因此,ConditionVariable 可用于在某事发生时向线程发出信号。让我们看看:

require 'thread'

a = [] # array a is empty now
mutex = Mutex.new
condvar = ConditionVariable.new

Thread.new do
mutex.synchronize do
sleep(5)
a << "Hey hey!"
# Now we have value in array; it's time to signal about it
condvar.signal
end
end

mutex.synchronize do
condvar.wait(mutex)
# This happens only after 5 seconds, when condvar recieves signal
puts "Hey. Array a is not empty now!"
end

关于ruby - 通过推送通知唤醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636746/

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