作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我用 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/
我是一名优秀的程序员,十分优秀!