
我有这个要求,其中我必须将POSIX信号量的值增加1以上。是否有其他替代方法可以实现此目的?还是我必须走System V方式?
那么,您真正的问题是什么?如何实现接口不支持的功能?或者如何使用POSIX
创建行为类似于信号量的结构?
如果稍后,在诉诸SysV之类的笨手笨脚之前,您始终可以使用
pthread_mutex_t/
pthread_cond_t对实现几乎所有的多线程同步原语,包括信号量。
例如,未经测试:
typedef cool_sem { pthread_mutex_t guard; pthread_cond_t cond; int count;} cool_sem_t;void init( cool_sem_t *s ){ pthread_mutex_init( &s->guard, 0 ); pthread_cond_init( &s->cond, 0 ); s->S = 0;}void incr( cool_sem_t *s, unsigned delta ){ assert( s ); pthread_mutex_lock( &s->guard ); s->S += delta; pthread_cond_broadcast( &s->cond ); pthread_mutex_unlock( &s->guard );}void decr( cool_sem_t *s, unsigned delta ){ assert( s ); pthread_mutex_lock( &s->guard ); do { if (s->S >= delta) { s->S -= delta; break; } pthread_cond_wait( &s->cond, &s->guard ); } while (1); pthread_mutex_unlock( &s->guard );}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)