FREE Sample of Disney Character Vitamin Gummies# PennySaver - 省钱一族
r*a
1 楼
我想用conditional variable, 可是pthread_cond_wait() only take mutex. 难道要
自己写cv_wait() 和cv_signal?
我的思路:
typedef struct mutex {
pthread_spin_lock_t lock;
int flag;
} mutex_t;
void mutex_lock(mutex_t *m)
{
pthread_spin_lock(&m->lock);
while (flag == 1)
cv_wait(flag, &m->lock); // I don't know which cv_wait to use that will
take spin lock
flag = 1;
pthread_spin_unlock(&m->lock);
}
void mutex_unlock(mutex_t *m)
{
pthread_spin_lock(&m->lock);
flag = 0;
cv_signal(flag);
pthread_spin_unlock(&m->lock);
}
自己写cv_wait() 和cv_signal?
我的思路:
typedef struct mutex {
pthread_spin_lock_t lock;
int flag;
} mutex_t;
void mutex_lock(mutex_t *m)
{
pthread_spin_lock(&m->lock);
while (flag == 1)
cv_wait(flag, &m->lock); // I don't know which cv_wait to use that will
take spin lock
flag = 1;
pthread_spin_unlock(&m->lock);
}
void mutex_unlock(mutex_t *m)
{
pthread_spin_lock(&m->lock);
flag = 0;
cv_signal(flag);
pthread_spin_unlock(&m->lock);
}