封装 System V 信号量的同步工具类。 更多...
#include <sttnet.h>
Public 成员函数 | |
| csemp () | |
| 构造函数,初始化内部状态。 更多... | |
| bool | init (key_t key, unsigned short value=1, short sem_flg=SEM_UNDO) |
| 初始化信号量。 更多... | |
| bool | wait (short value=-1) |
| P 操作(等待),尝试将信号量值减去 value。 更多... | |
| bool | post (short value=1) |
| V 操作(释放),尝试将信号量值加上 value。 更多... | |
| int | getvalue () |
| 获取信号量当前的值。 更多... | |
| bool | destroy () |
| 销毁当前信号量。 更多... | |
| ~csemp () | |
| 析构函数,不自动销毁信号量。 更多... | |
封装 System V 信号量的同步工具类。
csemp 提供互斥机制,支持进程间同步操作。通过封装 semget、semop、semctl 等系统调用, 实现信号量的初始化、P(等待)操作、V(释放)操作、销毁及读取当前值等功能。
禁用复制构造和赋值运算符,保证资源唯一。
|
inline |
构造函数,初始化内部状态。
| stt::system::csemp::~csemp | ( | ) |
析构函数,不自动销毁信号量。
| bool stt::system::csemp::destroy | ( | ) |
销毁当前信号量。
一般用于持有该信号量的主进程退出前清理资源。
| int stt::system::csemp::getvalue | ( | ) |
获取信号量当前的值。
| bool stt::system::csemp::init | ( | key_t | key, |
| unsigned short | value = 1, |
||
| short | sem_flg = SEM_UNDO |
||
| ) |
初始化信号量。
如果信号量已存在,则获取它;否则尝试创建并设置初值。
| key | 信号量的唯一键值。 |
| value | 信号量的初始值(默认1,表示互斥锁)。 |
| sem_flg | 信号量操作标志,默认 SEM_UNDO,操作会在进程终止后自动撤销。 |
| bool stt::system::csemp::post | ( | short | value = 1 | ) |
V 操作(释放),尝试将信号量值加上 value。
释放资源或唤醒等待中的进程。
| value | 释放值(必须大于0,默认 1)。 |
| bool stt::system::csemp::wait | ( | short | value = -1 | ) |
P 操作(等待),尝试将信号量值减去 value。
若当前值不足,会阻塞直到可用。
| value | 等待值(必须小于0,默认 -1)。 |
1.8.5