Как изменить мьютекс в pthread_cont_wait - PullRequest
0 голосов
/ 16 июня 2019

У меня проблема.Как я могу использовать pthread_cond_wait, если q->mutex должно быть sem_t

while(q->thread_lock[pom] < 0)
            pthread_cond_wait(&(q->cond), &(q->mutex));
        q->pthread_unlock[pom]--;

Теперь q->mutex равно pthread_mutex_t, но это должно быть sem_t.

struct

typedef struct{
        int *thread_lock;
        int *thread_unlock
        pthread_mutex_t mutex;
        pthread_cond_t cond;

}q

Я хочу сделать это:

typedef struct{
        int *thread_lock;
        int *thread_unlock
        sem_t mutex;
        pthread_cond_t cond;

}q

У меня есть эта проблема: https://i.ibb.co/fdHwMjx/blod.jpg

1 Ответ

2 голосов
/ 17 июня 2019

Вы не можете использовать sem_t с pthread_cond_wait(), для этого требуется pthread_mutex_t.

Принципиально парадигма мьютекса / условной переменной отличается от парадигмы семафора - бессмысленно объединять их таким образом. Я предлагаю опубликовать новый вопрос, описывающий основную проблему, которую вы пытаетесь решить.

...