自旋锁
以前所讲的是挂起等待锁,申请锁成功继续执行,申请失败挂起等待
挂起等待和唤醒是需要时间的,有没有一种锁不会挂起等待呢?那就是自旋锁,申请锁失败它不会挂起,他会轮询,一直让我们的线程申请锁
以前用的接口lock就是挂起等待的,而trylock是会立即返回,不会挂起等待,用trylock的时候我们可以用循环来让他轮询一直让我们的线程申请锁
然后pthread库也提供了另一种锁的接口
是不是发现它也有trylock的版本,是不是有疑问了?
这里的lock和互斥锁里的lock是不一样的,这里的lock申请锁成功继续执行,失败了,在你看来是阻塞的,但是在函数里面是让我们的线程一直申请锁,不会像互斥锁一样挂起 ,trylock申请失败会立即返回
它是和互斥锁很像的,相信你们肯定会使用了
那什么时候使用自旋锁呢?
取决于线程执行临界区代码的时长,访问文件,打印,计算这些等等都算时间长,修改文件的引用计数等等这些时长就短。
读写锁
读写者问题和生产消费者模型是很像的,也是321原则,只是会有点不同
3:三种关系
读者VS写者:同步互斥
写者VS写者:互斥
读者VS读者:共享,这个是和生产消费者模型不同的地方,生产消费者模型里的消费者VS消费者是互斥的关系,但是这里不是,是共享,因为消费者要拿走资源就互斥,而读者不拿走资源,一起看的
2:两种角色,读者,写者
1:一个场所,比如黑板
接口
了解即可,不是重点
一般是读者多写者少,如果只有一把锁,就会导致读者一直持有锁,导致写者写不了
那就要设计一种读者优先或者写者优先的代码,两把锁,一把读者锁,一把写者锁
写者优先类似的