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

来源:互联网 发布:数组 reverse 编辑:程序博客网 时间:2024/04/29 21:15

                              线程同步-读写锁(rwlock)

读写锁

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


相关函数

pthread_rwlock_t    //读写锁类型pthread_rwlock_init //初始化pthread_rwlock_destroy  //销毁锁pthread_rwlock_rdlock   //获取读锁pthread_rwlock_wrlock   //获取写锁pthread_rwlock_tryrdlockpthread_rwlock_trywrlockpthread_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 0