Rwlock
读写锁允许多个读者同时持有锁(共享读),但写者独占(排他写)。适合读多写少的场景——读者之间不互斥,写者与所有读者和其他写者互斥。
操作:read_lock(共享读锁)、read_unlock(释放读锁)、write_lock(独占写锁)、write_unlock(释放写锁)。仅在 Linux 上可用。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_rwlock_init | 读写锁初始化 |
| osal_rwlock_read_lock | 获取读锁 |
| osal_rwlock_read_unlock | 释放读锁 |
| osal_rwlock_write_lock | 获取写锁 |
| osal_rwlock_write_unlock | 释放写锁 |
| osal_rwlock_destory | 销毁读写锁 |
Functions
osal_rwlock_init
头文件清单
功能说明
- 读写锁初始化,在使用读写锁之前必须调用此接口完成初始化
- 初始化后读写锁处于未锁定状态,可用于后续读写操作
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指针不为 NULL,且指向的内存空间已申请成功
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向待初始化的读写锁结构体指针 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 初始化成功 | 读写锁初始化完成 |
| OSAL_FAILURE(-1) | 初始化失败 | 读写锁初始化过程中出错 |
osal_rwlock_read_lock
头文件清单
功能说明
- 获取读锁,进入临界区进行读操作
- 多个读操作可同时持有读锁,读锁与写锁互斥
- 若当前写锁已被持有,调用线程将阻塞等待直到写锁释放
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指向的读写锁已通过 osal_rwlock_init() 初始化成功
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向已初始化的读写锁结构体指针 | 非NULL,且已初始化 |
osal_rwlock_read_unlock
头文件清单
功能说明
- 释放读锁,退出读临界区
- 必须与 osal_rwlock_read_lock() 成对调用,确保锁的获取与释放匹配
- 释放读锁后,等待的写锁请求可能被唤醒
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指向的读写锁已通过 osal_rwlock_init() 初始化成功
- 当前线程已通过 osal_rwlock_read_lock() 获取读锁
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向已初始化的读写锁结构体指针 | 非NULL,且已初始化 |
osal_rwlock_write_lock
头文件清单
功能说明
- 获取写锁,进入临界区进行写操作
- 写锁与读锁、写锁均互斥,同一时刻仅允许一个线程持有写锁
- 若当前读锁或写锁已被持有,调用线程将阻塞等待直到所有锁释放
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指向的读写锁已通过 osal_rwlock_init() 初始化成功
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向已初始化的读写锁结构体指针 | 非NULL,且已初始化 |
osal_rwlock_write_unlock
头文件清单
功能说明
- 释放写锁,退出写临界区
- 必须与 osal_rwlock_write_lock() 成对调用,确保锁的获取与释放匹配
- 释放写锁后,等待的读锁或写锁请求可能被唤醒
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指向的读写锁已通过 osal_rwlock_init() 初始化成功
- 当前线程已通过 osal_rwlock_write_lock() 获取写锁
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向已初始化的读写锁结构体指针 | 非NULL,且已初始化 |
osal_rwlock_destory
头文件清单
功能说明
- 销毁读写锁,释放相关资源
- 不再需要读写锁时调用此接口,防止资源泄漏
- 销毁前需确保无任何线程持有读锁或写锁
- 仅支持 Linux 内核模式
前置条件
- 调用上下文为 Linux 内核态(KERNEL 宏已定义)
- 入参 rw_lock 指向的读写锁已通过 osal_rwlock_init() 初始化成功
- 当前无任何线程持有该读写锁的读锁或写锁
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rw_lock | osal_rwlock * | 指向待销毁的读写锁结构体指针 | 非NULL,且已初始化 |
Structures
osal_rwlock
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| rwlock | void * | 底层读写锁实现指针,屏蔽不同操作系统差异 |