• 手动实现读写锁(线程级)


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

    利用库函数

    写模式:
    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);    //解锁
    
  • 相关阅读:
    表的锁机制
    ABAP函数:VIEW_MAINTENANCE_CALL(维护表视图等)
    数据字典中新建表时出现黄色警告的处理
    smartforms长文本处理方式
    打印报表页码
    可以根据柜子内表取出所有的柜子信息的BAPI函数
    方法的重载、类的继承
    构造方法
    函数方法
    方法
  • 原文地址:https://www.cnblogs.com/sinpo828/p/10678952.html
Copyright © 2020-2023  润新知