仅使用互斥锁实现读写锁

清楚认识到读写锁分为共享锁(读锁)和独占锁(写锁),可能通过设置标志位记录读锁调用的次数结合互斥锁实现共享锁。但需要注意的是,以下的实现在多个写锁被阻塞时非常消耗计算机资源。因为线程阻塞在写锁中而没有被投入睡眠,导致轮询策略。避免轮询可通过互斥锁+条件变量实现读写锁,具体实现见上一篇博文。
以下是代码实现:

#include<pthread.h>

pthread_mutex_t rdLock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t wrLock = PTHREAD_MUTEX_INITIALIZER;
int readCnt = 0;//设置读锁调用次数的标志位

//实现读锁(共享锁)
void rdLock() {
    pthread_mutex_lock(&rdLock);
    readCnt++;
    if (readCnt == 1)//有人读,于是阻塞写锁
        pthread_mutex_lock(&wrLock);
    pthread_mutex_unlock(&rdLock);
}

void rdUnlock() {
    pthread_mutex_lock(&rdLock);
    readCnt--;
    if (readCnt == 0)//表示已没有人在读,释放写锁,可以写入了
        pthread_mutex_unlock(&wrLock);
    pthread_mutex_unlock(&rdLock);
}

void wrLock() {
    pthread_mutex_lock(&wrLcok);
}

void wrUnlock() {
    pthread_mutex_unlock(&wrLock);
}

原文链接: https://www.cnblogs.com/wsl-hitsz/p/15185464.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    仅使用互斥锁实现读写锁

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397239

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月10日 上午9:27
下一篇 2023年4月10日 上午9:27

相关推荐