读者写者问题 读写锁
读者写者问题的简单汇总
概念
在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。
而读写锁(
pthread_rwlock_init
)可以专门处理这种多读少写的情况。——如果不采用读写锁,那么由于读者对锁的竞争能力更强,可能导致写者的饥饿问题。
关系
- 写者 与 读者:互斥。
- 写者 与 写着:互斥。
- 读者 与 读者:共享。
读写锁接口
函数 | 描述 |
---|---|
pthread_rwlockattr_setkind_np |
设置读写优先。 |
pthread_rwlock_init |
初始化读写锁。 |
pthread_rwlock_destroy |
销毁读写锁。 |
pthread_rwlock_rdlock |
获取读锁。如果读锁已经被其他线程持有,则当前线程会阻塞。 |
pthread_rwlock_wrlock |
获取写锁。如果写锁已经被其他线程持有,则当前线程会阻塞。 |
pthread_rwlock_unlock |
释放读锁或写锁。 |
设置读写优先
1 |
|
销毁
1 |
|
加锁和解锁
1 |
|
读者写者问题 读写锁
https://weihehe.top/2024/08/02/读者写者问题/