在一些高级编程环境中(如Java、.NET),当从多个线程访问同一内存时,你必须明确地标记它为volatile或synchronized,否则你可能会因为CPU的乱序执行或其他优化而获得来自某些缓存的旧值或乱序值。
在MRI Ruby中,有一段时间使用本机操作系统线程。每个线程有时会执行Ruby代码(我假设是这样,但不确定),即使由于VM锁定而永远不会真正并行。
我猜MRI以某种方式解决了这些旧值/乱序值问题,因为Ruby语言中没有volatile结构,而我从未听说过旧值问题。
Ruby语言或MRI特别针对多个线程的内存访问提供了哪些保证?如果有人能指点我相关文档,我将非常感激。谢谢!
在MRI Ruby中,有一段时间使用本机操作系统线程。每个线程有时会执行Ruby代码(我假设是这样,但不确定),即使由于VM锁定而永远不会真正并行。
我猜MRI以某种方式解决了这些旧值/乱序值问题,因为Ruby语言中没有volatile结构,而我从未听说过旧值问题。
Ruby语言或MRI特别针对多个线程的内存访问提供了哪些保证?如果有人能指点我相关文档,我将非常感激。谢谢!