zoukankan      html  css  js  c++  java
  • 手动实现读写锁(线程级)

    读写锁是共享独占锁。
    读锁是共享锁:读的同时不能写,但同时可以多个进程一起读。
    写锁是独占锁:同时只能有一个进程进行写。

    利用库函数

    写模式:
    pthread_rwlock_wrlock(&rwlock);     //加写锁
    写写写……
    pthread_rwlock_unlock(&rwlock);     //解锁  
    
    读模式:
    pthread_rwlock_rdlock(&rwlock);      //加读锁
    读读读……
    pthread_rwlock_unlock(&rwlock);		//解锁
    

    互斥锁+条件变量

    这种方法互斥锁其实锁的是读写线程的数量(w,r 变量),通过读写线程个数协调读写操作。

    写模式:
    pthread_mutex_lock(&mutex);     //加锁
    while(w != 0 || r > 0)
    {
         pthread_cond_wait(&cond, &mutex);      //等待条件成立
    }
    w++;
     
    pthread_mutex_unlock(&mutex);
    写写写……
    pthread_mutex_lock(&mutex);
    w--;
    pthread_cond_broadcast(&cond);       //唤醒其他因条件变量而产生的阻塞
    pthread_mutex_unlock(&mutex);    //解锁
     
     
    读模式:
    pthread_mutex_lock(&mutex);     
    while(w != 0)
    {
         pthread_cond_wait(&cond, &mutex);      //等待条件成立
    }
    r++;
    pthread_mutex_unlock(&mutex);
    读读读……
    pthread_mutex_lock(&mutex);
    r--;
    if(r == 0)
         pthread_cond_broadcast(&cond);       //唤醒其他因条件变量而产生的阻塞
    pthread_mutex_unlock(&mutex);    //解锁
    
  • 相关阅读:
    iOS 十六进制字符串 "#FFFF00" 转换成颜色对象
    iOS toast 的连续显示
    文件管理
    pod 常用命令
    键盘事件
    iOS 添加阴影
    渐变色
    Ubuntu安装flameshot截图工具
    Ubuntu安装酸酸乳客户端
    Ubuntu安装网易云音乐
  • 原文地址:https://www.cnblogs.com/sinpo828/p/10678952.html
Copyright © 2011-2022 走看看