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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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吗?