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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM