c++ - Locking when accessing shared memory for reading -


if accessing shared memory reading only, check condition if() block, should still lock mutex? e.g.

mutex_lock();  if (var /* shared memory */) {  }  mutex_unlock(); 

is locking here needed , practice?

if variable reading written concurrently, yes, should acquire lock on mutex.

you read atomically if compiler provides necessary primitives that; either atomic features come c11 , c++11 or other language extension provided compiler. move mutex acquisition conditional, if wait until after test acquire mutex else may change between time test , time acquire mutex:

if (example) {     // "example" variable changed here thread.      mutex_lock();      // condition might false!      mutex_unlock(); } 

therefore, suggest acquiring mutex before conditional, unless profiling has pinpointed mutex acquisition bottleneck. (and in case tested variable larger cpu register -- 64-bit number on 32-bit cpu, example -- don't have option of delaying mutex acquisition without other kind of atomic fetch or compare primitive.)


Comments

Popular posts from this blog

Delphi XE2 Indy10 udp client-server interchange using SendBuffer-ReceiveBuffer -

Qt ActiveX WMI QAxBase::dynamicCallHelper: ItemIndex(int): No such property in -

Enable autocomplete or intellisense in Atom editor for PHP -