ここに仮説がありますが、検証するのは少し難しいです。
2 つのスレッドが同じオブジェクト インスタンスの同じメソッドを呼び出す場合、呼び出しスレッドごとに固有のスタック フレームはありますか? コンパイルされたバイナリでは、クラスはメモリ内の関数定義で満たされた静的コードセクションであると理解しています。異なるオブジェクト間の唯一の違いは、this
内部で渡されるポインターです。
ただし、それを呼び出すスレッドは独自のスタック フレームを持っている必要があります。そうしないと、2 つのスレッドが同じオブジェクト インスタンスの同じメンバー関数にアクセスしようとすると、互いのローカル変数が壊れてしまいます。
ここで繰り返しますが、2 つのスレッドがthis
同時に変更することでオブジェクト データが破損する可能性があるかどうかについては言及していません。2 つのスレッドが同じインスタンスの同じメソッドに同時に入る場合、そのコンテキストのローカル変数がメモリ内の同じ場所にあるかどうかについては、さらに詳しく調べています。繰り返しますが、そうではないというのが私の仮定です。