【Linux】读写锁模型

概念引入

在生活中,很多时候,写数据和读数据的时间并不是对等的,即有些时候,相比较写数据,读数据的时间反而更多。通常来说,在读的过程中,往往伴随着查找的动作,中间耗时很长,给这种代码加锁,会极大地降低程序的效率。这里就提出了一种读写锁模型,专门处理这种读多写少的问题。

读写锁模型也遵循321原则

  • 三种关系:写者--写者(互斥关系)、读者--读者(共享关系)、读者--写者(同步或互斥关系)
  • 两种角色:读者、写者
  • 一个交易场所:读写场所

读写锁模型和生产者和消费者模型很像,但是他们之间有一个本质区别,就是消费者会把生产者的数据拿走,但是读者不会把写者的数据拿走。

读写模型中还有优先级之分,分别是读者优先和写者优先。

代码实例:

#include <iostream>
#include <pthread.h>
#include <unistd.h>

using namespace std;

pthread_rwlock_t rw;//定义一个读写锁
int data = 0;

void *reader(void *arg)//读者
{
	while (1)
	{
		pthread_rwlock_rdlock(&rw);
		cout << "reader read done" << data << endl;
		pthread_rwlock_unlock(&rw);
		usleep(2000);
	}
}

void *writer(void *arg)//写者
{
	while (1)
	{
		pthread_rwlock_wrlock(&rw);
		cout << "writer write done" << ++data << endl;
		pthread_rwlock_unlock(&rw);
		usleep(3000);
	}
}

int main()
{
	pthread_rwlock_init(&rw, NULL);//读写锁的初始化
	pthread_t r[5];
	pthread_t w;
	int i;
	for (i = 0; i<5; i++)
	{
		pthread_create(&r[i], NULL, reader, NULL);
	}
	pthread_create(&w, NULL, writer, NULL);

	for (i = 0; i<5; i++)
	{
		pthread_join(r[i], NULL);//线程等待
	}
	pthread_join(w, NULL);
	pthread_rwlock_destroy(&rw);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值