問題タブ [mri]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Ruby では、なぜ「while true do i += 1 end」がスレッドセーフではないのですか?
この投稿によるとi += 1
、プリエンプションは関数呼び出しの最後でのみ発生し、間のどこかでは発生しないため、MRI Ruby ではスレッドセーフi += 1
です。
以下の繰り返し可能なテストは、これが正しいことを示しています。
しかし、while true do i += 1 end
以下の 2 番目のテストで示すように、スレッド 1 がまだ実行されているときにスレッド 1 がスレッド 2 によってプリエンプトされるのはなぜwhile true do i += 1 end
ですか?
助けてください。
以下はコードリファレンスです。
テスト 1:
テスト 2: