因在项目中,多线程对某记忆文件读写偶发错误,想着加锁来解决。文件读写锁无疑是一个非常好的选择
特点:读并发
1 如果一个线程用读锁锁定了临界区,那么其他线程也可以用读锁来进入临界区,这样可以有多个线程并行操作。这个时候如果再用写锁加锁就会发生阻塞。写锁请求阻塞后,后面继续有读锁来请求时,这些后来的读锁都将会被阻塞。这样避免读锁长期占有资源,防止写锁饥饿。
2 如果一个线程用写锁锁住了临界区,那么其他线程无论是读锁还是写锁都会发生阻塞。
头文件:
#include <pthread.h>
pthread_rwlock_t rwlock
可放到构造函数中初始化,在析构函数中销毁
pthread_rwlock_init(&rw_lock, nullptr); //初始化读写锁
pthread_rwlock_destroy(&rw_lock); //销毁互斥锁
读文件加锁与解锁
pthread_rwlock_wrlock(&rw_lock);//读文件的加锁
pthread_rwlock_unlock(&rw_lock); //解锁
写文件的加锁与解锁
pthread_rwlock_rdlock(&rw_lock); // 上锁
pthread_rwlock_unlock(&rw_lock); //解锁