多个用 PTHREAD_MUTEX_INITIALIZER 初始化的 pthread_mutex_t 不是同一个 mutex

参考:http://stackoverflow.com/questions/6310746/initializing-pthread-mutexes


【结论】

static pthread_mutex_t m0 = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;

像这样初始化的3个 pthread_mutex_t,并不是同一个 mutex,即在使用时,相互不影响。


【说明】


static pthread_mutex_t m0 = {0x32AAABA7, {0}};
static pthread_mutex_t m1 = {0x32AAABA7, {0}};
static pthread_mutex_t m2 = {0x32AAABA7, {0}};

尽管通过 gcc -E code.cpp,看似初始化成同样的东西,但

It is essentially an enum value, but with a Hamming code protection to (a) make it safe and (b) make it obscure. You have three distinct mutexes here


你可能感兴趣的:(多个用 PTHREAD_MUTEX_INITIALIZER 初始化的 pthread_mutex_t 不是同一个 mutex)