我的世界封面制作网站,网站可以做的兼职,网站搭建者,微信公众号怎么开店流程目录
读者写者模型
特殊锁
悲观锁
自旋锁 在前几期#xff0c;我们学习了多线程的生产者和消费者模型#xff0c;生产者和消费者模型中#xff0c;有三种关系#xff0c;两个角色#xff0c;一个场所#xff0c;那么读者写者模型和生产者消费者模型有什么关联吗…目录
读者写者模型
特殊锁
悲观锁
自旋锁 在前几期我们学习了多线程的生产者和消费者模型生产者和消费者模型中有三种关系两个角色一个场所那么读者写者模型和生产者消费者模型有什么关联吗以此问题展开本期内容的学习。
读者写者模型
通过一个现实生活中的场景为大家引入读者和写者模型。 小时候我们上学的时候每周或者说每学期都会写黑板报有的同学负责写有的同学负责读当有同学在进行写时其他同学不能写且其他同学不能读这里的不能读指的是当写的学生没有写完时因为没有写完黑板报内容不全一个同学在读黑板报时其他同学也可以去读也可以等这个同学读完之后再去读。 基于以上场景我们不难发现读者和写者模型有1个场所黑板两个角色写者和读者三种关系指的是两个角色所构成的关系读者和读者没有关系写者和写者是互斥关系写者和读者是互斥和同步关系。
综上读者和写者模型图示如下。 读者写者模型相关接口如下。
1.以读者身份加锁。 2.以写者身份加锁。 3.互斥锁的初始化和销毁。 4.读者锁和写者锁的解锁。读者和写者锁的解锁接口统一使用这个接口 。 读者和写者模型伪代码如下。具体实现代码我们不予实现读者写者内容我们了解即可。 特殊锁
悲观锁 何为悲观锁 悲观锁我们又称之为挂起等待锁。在多线程场景中往往只有一个锁资源且当这个锁资源被一个线程获取之后并进行加锁访问临界资源时其它线程是不能再次进行加锁的只能被阻塞挂起在阻塞队列中所以我们称之为悲观锁也称作挂起等待锁。 在前几期学习的互斥锁的学习中互斥锁就是一个悲观锁。
自旋锁
自旋锁我们通过一个现实生活中的场景。 场景一小明和小张准备出去玩小明已经准备好了所以提前来到了小张家楼下打电话问小张是否准备好小张说还得一个小时此时小明不继续在小张家楼下去等而是去了附近的网吧打了一小时游戏打了一小时游戏之后才去打电话问小张是否准备好小张也已经准备好了所以和小张一起出去玩了。 场景二第二天小明又准备和小张出去玩小明也和昨天一样提前准备好来到了小张家楼下当小明打电话时小张说还得一分钟所以此时小明就没有去网吧而是在楼下等了一分钟一分钟之内可能由于小张有点磨叽所以导致小明多次给小张打电话最终小明和小张一起出去去了外面玩。 上述两种场景我们发现唯一的区别就是小明在小张楼下等待的时间的长短以及在等待过程中给小张打电话的间隔。 悲观锁类似于场景一即得不到锁资源加锁时挂起在阻塞队列中不断地去轮询检测锁资源是否准备好但是这个轮训时间是很长的。自旋锁就类似于场景二得不到锁资源加锁时在阻塞等待队列中等待锁资源但轮询检测的时间间隔是很短的。 基于此那么悲观锁和自旋锁就有了自身的使用场景。
我们知道当多线程访问临界资源时我们一般要对临界资源进行加锁当线程访问临界资源比较慢时我们推荐使用悲观锁当访问临界资源比较快时我们使用自旋锁。
那么问题来了当线程访问临界资源时线程怎么知道自己访问临界资源是否快慢呢线程当然不知道但是我们程序员自然知道因为临界区的代码是我们程序员写的所以锁的使用就需要我们程序员自己去合理的分配。
这便是特殊锁中的悲观锁和自旋锁所有内容。
以上便是本期的所有内容^_^
至此Linux操作系统篇全部结束后续将展开Linux网络编程的学习。