互斥锁,信号量和条件变量的实现
这几天看了不少资料,这里做一个简单的总结归纳:
几个不错的网站:
线程的三个主要同步原语:互斥锁,信号量和条件变量,一下简称mutex,sem,cond。
- 其中mutex和sem都是对应futex进行了简单的封装,在不存在冲突的情况下就不用陷入到内核
中进行仲裁。而且pthread_join也是借助futex来实现的。而详见
- cond则是依靠mutex和信号来实现其语意,也就是说信号存在丢失的情况。sem是随内核持续的。
- 读写锁的自旋实现是指一直忙等待一个变量的可用,虽然消耗处理器,但是没有阻塞唤醒的代价。
唤醒丢失往往会在下面的情况下发生:
-
一个线程调用pthread_cond_signal或pthread_cond_broadcast函数;
-
另一个线程正处在测试条件变量和调用pthread_cond_wait函数之间;
-
没有线程正在处在阻塞等待的状态下。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步