如何使用 pthread 获取信号量的信息
How to get the information of semaphore with pthread
我用pthread.h和semaphore.h编写了一个程序
我发现 semaphore.h 中只有几个函数,如下所示:
int sem_close(sem_t *);
int sem_destroy(sem_t *);
int sem_getvalue(sem_t * __restrict, int * __restrict);
int sem_init(sem_t *, int, unsigned int);
sem_t*sem_open(const char *, int, ...);
int sem_post(sem_t *);
int sem_timedwait(sem_t * __restrict, const struct timespec * __restrict);
int sem_trywait(sem_t *);
int sem_unlink(const char *);
int sem_wait(sem_t *);
我想知道,哪个线程将获得信号量,线程将获得多少个信号量?怎么办?我能做到吗?
PS:这里的"get"意味着线程调用函数"sem_wait",这会降低信号量的值
如果我无法获取信号量的信息,是否有任何机制可以确保一个线程只能获取一个信号量?提前谢谢你。
sem_getvalue会告诉你信号量的值;知道它的初始值意味着你可以确定有多少进程"得到"了信号量。 但是,您获得的值在获得时可能已经过时。
由于线程完成了所有"获取"和发布,因此它可以确定它为自己"获取"了多少,并在必要时使该信息可供其他线程使用。
至于确保每个线程只"获得"一个信号量,我认为你必须编写代码,如果它已经"有"一个信号量,则不要请求另一个信号量。
如果我
正确理解了您的问题,只需在获取信号量的线程上使用 pthread_self()
函数即可获取其 ID。 如果您需要其他线程知道信号量的所有权信息,您可以设置一个简单的数据结构,如数组或哈希表等,以跟踪哪个线程持有哪个信号量。 为了避免更新表时出现问题,请确保只有持有信号灯的线程才能写入正在持有的信号量的所有权表,并且只允许不持有信号灯的所有其他线程从表中读取。
相关文章:
- 删除旧的信号量系统V
- 父进程和子进程之间的 POSIX 信号量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- C/C++ - 用于按顺序打印数字的 sem_t 类型的单个信号量
- 单车道桥 使用信号量进行同步
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 这个餐饮哲学家问题(dpp)的解决方案是如何工作的?互斥体和信号量
- 发布信号量返回错误 6(无效句柄)
- 在 C Linux 中使用三个线程使用信号量同步按顺序打印 3 4 5 50 次
- 在使用 pthread 和信号量实现生产者-消费者问题时需要帮助
- 如何让一个线程继续,而另一个线程正在等待C++中的信号量
- 实现信号量
- 计算信号量还是互斥体?
- POSIX 信号量在高争用/负载下不起作用
- C++:提升:托管共享内存是否需要信号量锁
- 信号量的问题
- 如何使用Windows API直接将进程"assign"到信号量?
- 从主线程C++更新信号量
- 如何使用 pthread 获取信号量的信息