linux系统编程:线程同步-读写锁(rwlock)

                              线程同步-读写锁(rwlock)

读写锁

读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。


相关函数

pthread_rwlock_t    //读写锁类型
pthread_rwlock_init //初始化
pthread_rwlock_destroy  //销毁锁
pthread_rwlock_rdlock   //获取读锁
pthread_rwlock_wrlock   //获取写锁
pthread_rwlock_tryrdlock
pthread_rwlock_trywrlock
pthread_rwlock_unlock   //释放读写锁
    

示例

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
pthread_rwlock_t rwlock;
int counter = 0;
void *fun_r(void *argv)
{
	while (1)
	{
		//既然是读操作,当然可以完全不用锁
		pthread_rwlock_rdlock(&rwlock);
		printf("thread %x read,counter=%d\n", pthread_self(), counter);
		pthread_rwlock_unlock(&rwlock);
		sleep(1);
	}
}
void *fun_w(void *argv)
{
	while (1)
	{
		//写操作,写操作使用写锁
		pthread_rwlock_wrlock(&rwlock);
		counter++;
		printf("thread %x write,counter=%d\n", pthread_self(), counter);
		pthread_rwlock_unlock(&rwlock);
		sleep(1);
	}
}
int main(void)
{
	pthread_rwlock_init(&rwlock, NULL);
	pthread_t tid[5];
	int i;
	//开启2个线程读
	for (i = 0; i < 2; i++)
	{
		pthread_create(&tid[i], NULL, fun_r, NULL);
	}
	//开启3个线程写
	for (i = 2; i < 5; i++)
	{
		pthread_create(&tid[i], NULL, fun_w, NULL);
	}
	for (i = 0; i < 5; i++)
	{
		pthread_join(tid[i], NULL);
	}
	pthread_rwlock_destroy(&rwlock);
	return 0;
}

        



CCPP Blog 目录

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值