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

 

你可能感兴趣的:(C++)