前回ノンブロッキングなSTMに付いて説明したのですが、トランザクション中での読み出しに関してはあまりに適当な説明しかしていなかったです。 そこをもう少しまともに説明しようと思います。 読み出しトランザクション? 複数の箇所の読み出しをatomicに行う必要があります。 一番簡単な方法は「その値そのもので上書きしてやる」事で値を変えずに所有権を自分に移す事です。 transactional_object<int> *a,*b; const int *commited_a, *commited_b; status_t my_status = new status_t(ACTIVE); retry: transactional_object<int> *old_a = a, *old_b = b; // aを読む if(*(old_a->owner_) == COMMITTED){ commit