首页 > 其他 > 详细

读写锁

时间:2016-04-28 15:32:51      阅读:129      评论:0      收藏:0      [点我收藏+]

一、读写锁:特殊的自旋锁  

    将共享资源的访问者分为 读者和写者。

    读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。

    这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。

    自旋锁设定为写的优先级高于读

  • 相关函数:

    #include<pthread.h>    

    int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); //非阻塞方式加(写)锁

    int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); //写 方式加锁

    int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); //解锁

       int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); //读 方式加锁

       int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

    int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); //销毁读写锁

    int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,

              const pthread_rwlockattr_t *restrict attr);  //初始化读写锁

二、读写锁 实例

#include<stdio.h>
#include<pthread.h>

pthread_rwlock_t rw_lock;
int g_val=0;

void *reader(void *arg)
{
	while(1)
	{
		pthread_rwlock_rdlock(&rw_lock);
		printf("reader;%u,read val:%d\n",pthread_self(),g_val);
		pthread_rwlock_unlock(&rw_lock);
		sleep(1);
	}
}
void *writer(void *arg)  //写者:排他性
{
	while(1)
	{
		pthread_rwlock_wrlock(&rw_lock);
		g_val++;
		printf("writer:%u,write val:%d\n",pthread_self(),g_val);
		pthread_rwlock_unlock(&rw_lock);
		sleep(3);
	}
}
int main()
{
	pthread_rwlock_init(&rw_lock,NULL);
	pthread_t tid1,tid2;
	pthread_create(&tid1,NULL,reader,NULL);
	pthread_create(&tid2,NULL,writer,NULL);
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	pthread_rwlock_destroy(&rw_lock);
	return 0;
}

运行结果:

    技术分享

    写者具有排他性,读写锁中只能有一个写者或多个读者,二者不能同时存在。

本文出自 “花开彼岸” 博客,请务必保留此出处http://zxtong.blog.51cto.com/10697148/1768573

读写锁

原文:http://zxtong.blog.51cto.com/10697148/1768573

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!