Linux系统编程——同步——读写锁

1. 读写锁的定义

write 和 readers:

  • 当一个进程获得读锁时,其他进程可以获得读锁,而不能获得写锁
  • 当一个进程获得写锁时,其他进程不能获得任何锁

因为当数据正在被写时,数据是脏的,所以读共享,写独占

2. api

2.1 静态初始化

读写锁类型是 pthread_rwlock_t,使用 常量 PTHREAD_RWLOCK_INITIALIZER 来初始化

2.2 动态初始化

int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwptr);

2.3 获得/释放锁

以下api用于 读/写 方式获得锁,和释放锁

int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);

以下api以非阻塞方式获得锁,若失败返回 EBUSY

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr);

2.4 设置属性

int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr *attr, int valptr);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int value);

value为 PTHREAD_PROCESS_PRIVATE 或 PTHREAD_PROCESS_SHARED

posted on   开心种树  阅读(79)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示