我用pthread.h和semaphore.h编写了一个程序
我发现信号量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/