問題タブ [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.

0 投票する
1 に答える
183 参照

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: