【线程】自旋锁和读写锁

打印 上一主题 下一主题

主题 1636|帖子 1636|积分 4908

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自旋锁

以前所讲的是挂起等待锁,申请锁乐成继续实行,申请失败挂起等待
挂起等待和唤醒是需要时间的,有没有一种锁不会挂起等待呢?那就是自旋锁,申请锁失败它不会挂起,他会轮询,一直让我们的线程申请锁

以前用的接口lock就是挂起等待的,而trylock是会立即返回,不会挂起等待,用trylock的时候我们可以用循环来让他轮询一直让我们的线程申请锁
然后pthread库也提供了另一种锁的接口


是不是发现它也有trylock的版本,是不是有疑问了?
这里的lock和互斥锁里的lock是不一样的,这里的lock申请锁乐成继续实行,失败了,在你看来是阻塞的,但是在函数里面是让我们的线程一直申请锁,不会像互斥锁一样挂起 ,trylock申请失败会立即返回
它是和互斥锁很像的,信赖你们肯定会使用了
那什么时候使用自旋锁呢?
取决于线程实行临界区代码的时长,访问文件,打印,计算这些等等都算时间长,修改文件的引用计数等等这些时长就短。
读写锁

读写者问题和生产斲丧者模子是很像的,也是321原则,只是会有点差别
3:三种关系
读者VS写者:同步互斥
写者VS写者:互斥
读者VS读者:共享,这个是和生产斲丧者模子差别的地方,生产斲丧者模子里的斲丧者VS斲丧者是互斥的关系,但是这里不是,是共享,由于斲丧者要拿走资源就互斥,而读者不拿走资源,一起看的
2:两种脚色,读者,写者
1:一个场所,比如黑板
接口

相识即可,不是重点



一般是读者多写者少,如果只有一把锁,就会导致读者一直持有锁,导致写者写不了
那就要设计一种读者优先或者写者优先的代码,两把锁,一把读者锁,一把写者锁

写者优先雷同的 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表