【发布时间】:2013-11-29 01:36:50
【问题描述】:
我已经使用 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_wait并减小semaphore@ScottHunter的值
-
对信号量强制执行的唯一操作是 P/V、发布和等待。
-
我知道。这里的“get”表示线程调用函数 sem_wait@MartinJames
-
SysV 信号量(不是您正在使用的 posix 信号量)允许您查询哪个进程上次对信号量执行操作,因此如果最后一次操作发生在等待中,您可以获得该信息。问题应该是为什么需要它。如果是为了调试,一个简单的日志可以告诉你同样的事情。
标签: c++ linux multithreading pthreads