Subj : Re: Can C++ local static objects be made thread safe? To : comp.programming.threads From : SenderX Date : Sat Jan 22 2005 07:20 pm > Your "7: ..." inside synchronized region is pointless. Doh! Yes it is. > And, again, > your linuxoidic notation to express unidirectional constraints is > just awful. Humm. How about: /* sink-store barrier extern void ac_cpu_i686_mb_store_ssb ( void**, void* ) */ align 16 ac_cpu_i686_mb_store_ssb PROC mov ecx, [esp + 4] mov eax, [esp + 8] sfence mov [ecx], eax ret ac_cpu_i686_mb_store_ssb ENDP /* hoist-load barrier with dd "hint" extern void* ac_cpu_i686_mb_load_ddhlb ( void** ) */ align 16 ac_cpu_i686_mb_load_ddhlb PROC mov ecx, [esp + 4] mov eax, [ecx] lfence ret ac_cpu_i686_mb_load_ddhlb ENDP /* pseudo-code */ 1. static T *shared = 0; 2. T *local = ac_cpu_i686_mb_load_ddhlb( &shared ); 3. if ( ! local ) 4. { ac_mutex_lock( &static_mutex ); 5. if ( ! ( local = shared ) ) 6. { local = ac_cpu_i686_mb_store_ssb( &shared, new T ); } 7. ac_mutex_unlock( &static_mutex ); } ;) .