0

共有メモリの場所に対して読み取り/書き込みを行う 2 つの pthread があります。1 つのスレッドで、メモリ ロケーションの更新をチェックし続けます。(Linux、Glibc)

スレッド 1:

while(1) {
    if (ptr)
        ptr->do_something();
}

スレッド 2:

ptr = update();

ここでのポイントは、しばらく経っても更新が反映されていないことです。次のように同期バリアを使用すると、更新がすぐに表示されます。

    while(1) {

    __sync_synchronize();
    if (ptr)
        ptr->do_something();
    }

だから私の質問は:

  1. しばらくたってもアップデートが表示されないのはなぜですか?
  2. __sync_synchronize() は正確には何をしますか?

編集 1: 更新がすぐに表示されない理由を理解しています。私の質問は、具体的には、非常に長い間表示されていない理由です。

4

1 に答える 1