说明
在某些平台,信号量可能并不支持,可以使用互斥锁和条件变量模拟实现信号量,代码如下
代码
typedef struct {
int val; //信号量的值
pthread_mutex_t mutex;
pthread_cond_t cond;
} semaphore_t;
inline void sem_init(semaphore_t *s, int n)
{
pthread_mutex_init(&(s->mutex), NULL);
pthread_cond_init(&(s->cond), NULL);
s->val = n;
}
inline void sem_post(semaphore_t *s)
{
pthread_mutex_lock(&(s->mutex));
s->val++;
pthread_cond_signal(&(s->cond));
pthread_mutex_unlock(&(s->mutex));
}
inline int sem_wait(semaphore_t *s)
{
int rc = 0;
pthread_mutex_lock(&(s->mutex));
while (s->val == 0)
rc = pthread_cond_wait(&(s->cond), &(s->mutex));
s->val--;
pthread_mutex_unlock(&(s->mutex));
return rc;
}
inline void sem_destroy(semaphore_t *s)
{
pthread_mutex_destroy(&(s->mutex));
pthread_cond_destroy(&(s->cond));
s->val = 0;
}
本文介绍了一种在不支持信号量的平台上使用互斥锁和条件变量来模拟信号量的方法。通过定义一个包含整型值、互斥锁和条件变量的数据结构,并提供了初始化、增加信号量值、等待信号量以及销毁信号量的相关函数。
1978

被折叠的 条评论
为什么被折叠?



