Ruby的stdlib Logger类是线程安全的吗?

简而言之,Ruby中的标准库Logger类是否是线程安全的? 谷歌出现的唯一有用信息是论坛上有人说它“似乎”是线程安全的。 而且我不想花时间测试记录器来试图弄清楚它是否存在。

暂时我使用的是log4r ,它是线程安全的,但是如果标准库已经这样做了就太过分了。

快速查看logger.rb可以看到如下代码:

def write(message) @mutex.synchronize do if @shift_age and @dev.respond_to?(:stat) begin check_shift_log rescue raise Logger::ShiftingError.new("Shifting failed. #{$!}") end end @dev.write(message) end end 

因此,虽然我不能保证它是否正确的线程安全性,但我可以确认它正在齐心协力做到这一点!

PS通过阅读代码,通常很容易回答这样的问题:-)

以下是我原来的回答,实际上是错误的 。 阅读下面的Nemo157评论。 我把它留在这里仅供参考。

原版的:

我认为这不重要。 到目前为止,我所知道的Ruby的所有实现都有效地一次运行一个线程:它允许您启动多个线程,但每个进程一次只运行一个线程。

一些Ruby类被设计为线程安全的,但是在文档中的一个音节的单词中没有明确说明。 与其他编程语言(如PHP)中的文档不同。

我记得被问到Queue在Stack Overflow上是否是线程安全的,即使它是,但文档并没有说出来。