南宁企业自助建站系统,企业官网网页设计报价,瑞昌市环保局网站建设,软件项目管理经验总结1、读写锁概念
对资源的访问抽象为两种类型#xff0c;即独占和共享。独占资源具有排他性#xff0c;例如写操作。共享资源可以同时由多个线程访问#xff0c;不对该资源执行写操作。针对资源的读和写操作分别加锁#xff0c;写操作加锁与互斥锁相同#xff0c;但读操作加…1、读写锁概念
对资源的访问抽象为两种类型即独占和共享。独占资源具有排他性例如写操作。共享资源可以同时由多个线程访问不对该资源执行写操作。针对资源的读和写操作分别加锁写操作加锁与互斥锁相同但读操作加锁可以让多个线程同时访问。
优点互斥锁进入临界区后未获得锁的线程会阻塞因此会降低程序的并发效率。读写锁可以对读操作高效访问提高资源利用效率并发性能更高。
POSIX库中用类型pthread_rwlock_t来定义互斥锁类型在pthreadtypes.h中定义。
2、如何声明一个读写锁
#include pthread.hpthread_rwlock_t rwlock;
3、如何初始化一个读写锁
//静态初始化读写锁
pthread_rwlock_t rwlock PTHREAD_RWLOCK_INITIALIZER;//动态初始化读写锁
pthread_rwlock_t rwlock;
pthread_rwlock_init(rwlock,NULL);
静态初始化的读写锁不需要销毁动态初始化的读写锁需要销毁销毁函数声明如下
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
4、如何上锁和解锁
//读模式上锁方式1程序进入临界区如果写模式已经上锁则阻塞等待如果读模式上锁则获得锁进入临界区
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);//读模式上锁方式2程序进入临界区如果读写已经上锁不阻塞返回EBUSY
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);//写模式上锁方式1程序进入临界区如果读写已经上锁不阻塞返回EBUSY
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);//写模式上锁方式2程序进入临界区如果读写已经上锁不阻塞返回EBUSY
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);//解锁程序退出临界区
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);