gpt4 book ai didi

ruby - Thread.exclusive 实际上做了什么?

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

来自 API 的信息非常稀少 - 还考虑到 Thread.critical 似乎没有记录。

Wraps a block in Thread.critical, restoring the original value upon exit from the critical section, and returns the value of the block.

最佳答案

tl;dr:它使给定的 block 执行,因此没有其他 ruby​​ 线程可以中断它。

documentation of Thread.exclusive具有误导性,因为它提到 Thread.critical= which was removed in ruby version 1.9 .但是,我们可以通过查看 ruby​​ 源代码来推断它的作用。

在 MRI 中 Thread.exclusiveprelude.rb 中定义.由于它是一个非常短的文件,我将在此处引用它的内容:

class Thread  MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new # :nodoc:  def self.exclusive    MUTEX_FOR_THREAD_EXCLUSIVE.synchronize{      yield    }  endend

这里 Thread 类由静态常量 MUTEX_FOR_THREAD_EXCLUSIVE 扩展,它包含一个 Mutex .当调用 exclusive 时,我们要求互斥体同步 block 的执行。

Mutex' documentation 中所述, synchronize 获取锁,运行 block ,并在 block 完成时释放锁。

因为互斥量是线程全局状态,所以同一时间只有一个线程可以持有它。

所以这是可行的:

# no other Thread can do something between this puts statementsThread.exclusive do  puts 1  puts 2end

但这不会:

Thread.exclusive do  puts 1  Thread.exclusive do    puts 2  end    puts 3end

因为这个错误:ThreadError: deadlock;递归锁定

关于ruby - Thread.exclusive 实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723627/

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