c++ - 如何用pthread获取信号量的信息

标签 c++ linux multithreading pthreads

我用 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 会告诉你信号量的值;知道它的初始值意味着您可以确定有多少进程“获得”了信号量。但是,您获得的值在您获得时可能已经过时。

由于该线程完成了所有“获取”和释放操作,它可以确定它为自己“获取”了多少,并在必要时将该信息提供给其他线程。

至于确保每个线程只“获取”一个信号量,我认为如果它已经“拥有”一个信号量,您将不得不编写代码以不请求另一个信号量。

关于c++ - 如何用pthread获取信号量的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004824/

相关文章:

java - 如何使用 JNI 在 C++ 中设置类成员

c - 取消线程后如何杀死所有使用 pthread_create 创建的子进程?

linux - grep/etc/passwd 和/etc/group 列出所有用户和用户所属的每个组

java - JPA/Hibernate 实体类和同步的最佳实践是什么?

java - 在 JavaFX 任务中创建 JavaFX 对话框

基于 C++ 堆栈的构造函数/析构函数未按预期工作

c++ - VC++ 允许为 STL 容器使用 const 类型。为什么?

objective-c - 我可以在Objective-C中捕获从另一个线程的一个线程抛出的异常吗?

c++ - 通过写入当前正在执行的文件来更新程序

Linux:尽管安装了 libgthread,我如何处理 "GThread not available"