マルチスレッドプログラミング相談室 その2
■ このスレッドは過去ログ倉庫に格納されています
0875デフォルトの名無しさん
NGNG> if(!instance) {
> lock;
> if(!instance) {
> tmp = new T;
> // (*)ここにメモリバリアを置かなくてOK?
> instance = tmp;
> }
> unlock;
> }
> return instance;
>
> の(*)の部分を心配しているという感じです。如何でしょうか?
厳密には、(*)にメモリバリアを置いただけでは不十分。
(*)だけだと「メインメモリへの書き出し順序」は保証されるが、
他のCPUがそれを読み込む順序までは保証されない。
とはいえ、IA32やIA64ではそんな心配は無用だが。
> ARMやPPCやAlphaでは誤動作します?
確かAlphaでは上記の現象が問題になる可能性があったと思うが、
ソースを失念した。スマソ。
■ このスレッドは過去ログ倉庫に格納されています