linux同步机制

一、自旋锁函数

得到自旋锁以后禁止内核抢占,但能够被中断上半部打断。运行于中断上下文优化

单cpu不可抢占内核:空操做线程

单cpu可抢占内核:禁止内核抢占,不发生自旋指针

多cpu可抢占内核:禁止内核抢占+自旋递归

二、互斥锁进程

内核能够抢占,能够被其余进程抢占,运行于进程上下文资源

三、读写锁效率

因为其特殊的逻辑使得其效率相对普通的互斥锁和自旋锁要慢一个数量级,按POSIX标准 在线程申请读锁并未释放前本线程申请写锁是成功的,但运行后的逻辑结果是没法预测。读和写同时获取锁,写具备优先获取。特殊的自旋锁,禁止抢占。date

四、顺序锁cpu

对读写锁的一种优化,禁止内核抢占,读和写能够同时进行,多个读者能够同时访问临界资源,但不能同时写

读写能够同时进行这是读写锁不具有的,但使用顺序锁也有限制条件:访问的临界资源不能是指针

五、RCU(read-copy update)

读写能够同时进行,写数据时,先拷贝而后修改,再用更新好的数据覆盖原有数据。

一样得到锁以后禁止内核抢占

六、递归锁

互斥锁的一个特例,互斥锁设置参数PTHREAD_MUTEX_RECURSIVE_NP,运行互斥锁递归加锁和释放锁

七、原子操做

八、信号量

九、信号

十、barrier(信号屏障)

barrier()函数先后的代码执行不能越过barrier

相关文章
相关标签/搜索