标签:
bdb mutex有两种用途:
mux_win32.c 和mut_tas.c的实现类似,
在mut_pthread.c 中, 不去spin
db mutex应该提供memory barrier语义, tas中调用MEMBAR_ENTER(). x86不用考虑乱序, pthread lock会提供membar语义. pthread会设置PTHREAD_PROCESS_SHARED, 提供多进程支持.
为什么只在pthread中才考虑SELF_BLOCK呢?
SELF_BLOCK语义: 初始化mtx后, 马上lock一次. 再一次 lock则被锁住.
http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_lock.html
而且 文档提到: Mutexes are expected to be locked only for a few instructions.
所以必须使用conditional variable:
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cond_timedwait.html
基本上, condition的工作原理 和java的wait-notify完全(完全么?)一致:
mtx: locked unlocked T1: lock并被block. 得到mtx锁 T2: unlock mtx 唤醒T1
最终 mtx还是锁住的状态.
标签:
原文地址:http://www.cnblogs.com/brayden/p/5238115.html