zoukankan      html  css  js  c++  java
  • c++ 读写锁

    #ifndef THREAD_UTIL_H
    #define THREAD_UTIL_H
    
    #include <pthread.h>
    
    namespace spider {
    
        class AutoLock {
            pthread_mutex_t * _lock;
        public:
            AutoLock(pthread_mutex_t * lock) {
                _lock = lock;
                pthread_mutex_lock(_lock);
            }
            ~AutoLock() {
                pthread_mutex_unlock(_lock);
            }
        };
    
        class RWLock {
            pthread_rwlock_t _lock;
        public:
            RWLock() {
                pthread_rwlock_init(&_lock, NULL);
            }
            int read() {
                return pthread_rwlock_rdlock(&_lock);
            }
            int write() {
                return pthread_rwlock_wrlock(&_lock);
            }
            int unlock() {
                return pthread_rwlock_unlock(&_lock);
            }
        };
    
    
        class AutoRead {
            RWLock * _lock;
        public:
            AutoRead(RWLock * p) {
                _lock = p;
                _lock->read();
            }
            ~AutoRead() {
                _lock->unlock();
            }
        };
    
        class AutoWrite {
            RWLock * _lock;
        public:
            AutoWrite(RWLock * p) {
                _lock = p;
                _lock->write();
            }
            ~AutoWrite() {
                _lock->unlock();
            }
        };
    }
    #endif  // THREAD_UTIL_H
    
    /* vim: set ts=4 sw=4 sts=4 tw=100 */
    
    
    c++多线程之读写锁
    pthread是POSIX threads的简称,是POSIX的线程标准
    
    pthread读写锁把对共享资源的访问分为读者和写者,读者只对共享资源进行读访问,写者只对共享资源进行写操作。
    在互斥机制,读者和写者都需要独立独占互斥量以独占共享资源,
    在读写锁机制下,允许同时有多个读者访问共享资源,只有写者才需要独占资源。
    相比互斥机制,读写机制由于允许多个读者同时访问共享资源,进一步提高了多线程的并发度。
    
    1. 读写锁机制
    写者:写者使用写锁,如果当前没有读者,也没有其他写者,写者立即获得写锁;
    否则写者将等待,直到没有读者和写者。

    读者:读者使用读锁,如果当前没有写者,读者立即获得读锁;否则读者等待,直到没有写者。

    2. 读写锁特性:
    同一时刻只有一个线程可以获得写锁,同一时刻可以有多个线程获得写锁。
    读写锁出于写锁状态时,所有试图对读写锁加锁的线程,不管是读者试图
    加读锁,还是写者试图加写锁,都会被阻塞。

    读写锁处于读锁状态时,有写者试图加写锁时,之后的其他线程的读锁请求
    会被阻塞,以避免写者长时间的不写锁。

    3. 读写锁基本函数:
    #include <pthread.h>
    --------------
    读写锁初始化
    int pthread_rwlock_init(pthread_rwlock_t * rwlock, const pthread_rwlockattr_t * attr);
    该函数第一个参数为读写锁指针,第二个参数为读写锁属性指针。函数按读写锁属性对读写锁进行
    初始化。
    -------------- http:
    //www.th7.cn/Program/cp/201405/195894.shtml
  • 相关阅读:
    MS SQL 挑战问题
    ORA00060错误
    用SYS本地登录或远程登录引起ORA01031错误
    RhelServer 5.5 安装ORACLE10
    sys不能远程登录的问题
    ORA12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
    MERGE INTO 性能问题疑问
    断开网线后监听服务器配置
    ORACLE——Instant Client配置SQL*LDR、EXP等命令工具
    监听服务管理
  • 原文地址:https://www.cnblogs.com/i80386/p/4478021.html
Copyright © 2011-2022 走看看