【Linux】—— Linux读写者模型

读写者模型

读写锁

在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁

读写锁行为

读写锁接口

设置读写优先

读写优先

初始化

初始化

销毁

销毁

加锁和解锁

加锁解锁

读写者模型源码展示

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

using namespace std;
int data = 0;
pthread_rwlock_t rw;

void* reader(void* arg)
{
    for(;;){
        pthread_rwlock_rdlock(&rw);
        cout << "reader read done: " << data << endl;
        pthread_rwlock_unlock(&rw);
        usleep(100);
    }
}

void* writer(void* arg)
{
    for(;;){
        pthread_rwlock_wrlock(&rw);
        cout << "writer write done : "<< ++data << endl;
        pthread_rwlock_unlock(&rw);
        usleep(90);
    }
}


int main()
{
    pthread_rwlock_init(&rw,NULL);
    pthread_t r[5],w;
    for(int i = 0;i < 5; ++i){
         pthread_create(&r[i],NULL,reader,NULL);
    }
    pthread_create(&w,NULL,writer,NULL);

    for(int i = 0;i < 5; ++i){
         pthread_join(r[i],NULL);
    }
    pthread_join(w,NULL);
    pthread_rwlock_destroy(&rw);
    return 0;
}

  • Makefile
rw:rw.cc
	g++ -std=c++11 -o $@ $^ -lpthread
.PHONY:clean
clean:
	rm -f rw
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值