, `pthread_cond_signal`을 호출하기 전에`pthread_mutex_unlock`이 호출되는 이유는 무엇입니까? 다중 프로그래밍의 예술에서
1 #include <pthread.h>
2 #define QSIZE 16
3 typedef struct {
4 int buf[QSIZE];
5 long head, tail;
6 pthread_mutex_t *mutex;
7 pthread_cond_t *notFull, *notEmpty;
8 } queue;
9 void queue_enq(queue* q, int item) {
10 // lock object
11 pthread_mutex_lock (q->mutex);
12 // wait while full
13 while (q->tail - q->head == QSIZE) {
14 pthread_cond_wait (q->notFull, q->mutex);
15 }
16 q->buf[q->tail % QSIZE] = item;
17 q->tail++;
18 // release lock
19 pthread_mutex_unlock (q->mutex);
20 // inform waiting dequeuers
21 pthread_cond_signal (q->notEmpty);
22 }
와 유닉스 환경
void
enqueue_msg(struct msg *mp)
{
pthread_mutex_lock(&qlock);
mp->m_next = workq;
workq = mp;
pthread_mutex_unlock(&qlock);
pthread_cond_signal(&qready);
}
왜 고급 프로그래밍에서
는pthread_mutex_unlock
는
pthread_cond_signal
를 호출하기 전에이라고?
In Java, unlocking is called after calling signal. 왜 차이가 있습니까?
감사합니다.
내가 잘못 생각합니다. https://stackoverflow.com/questions/4544234/calling-pthread-cond-signal-without-locking-mutex –
@ JerryJeremiah 감사합니다. APUE에는 신호 이전에 잠금을 해제하는 예제가 있습니다. 내 업데이트를 참조하십시오. – Ben