뮤텍스 없이 pthread_cond_signal을 호출하면 신호가 손상됩니까?
일부 문헌에 따르면 pthread_cond_signal을 호출하려면 먼저 뮤텍스를 잠그고 나중에 잠금을 해제해야 한다고 합니다. 그러나 뮤텍스 잠금 없이 pthread_cond_signal 또는 pthread_cond_broadcast를 호출할 수 있습니까?
답변:
아니요, 뮤텍스를 먼저 잠그지 않고 pthread_cond_signal 또는 pthread_cond_broadcast를 호출하는 것은 안전하지 않습니다. 이는 두 프로세스(A 및 B)가 포함된 간단한 예를 통해 설명됩니다.
프로세스 A:
pthread_mutex_lock(&mutex); while (condition == FALSE) pthread_cond_wait(&cond, &mutex); pthread_mutex_unlock(&mutex);
프로세스 B(잘못됨):
condition = TRUE; pthread_cond_signal(&cond);
조건이 FALSE로 시작하고 프로세스 B가 뮤텍스 없이 신호를 시도하는 경우 잠금 중이면 명령어 인터리빙으로 인해 프로세스 A가 깨우기 신호를 놓칠 수 있습니다.
프로세스 B(올바른):
pthread_mutex_lock(&mutex); condition = TRUE; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);
잠금 프로세스 B의 뮤텍스는 이 문제를 방지하여 프로세스 A가 깨우기 신호를 받도록 합니다.
참고: 기술적으로는 가능하지만 pthread_cond_signal()을 pthread_mutex_unlock() 뒤로 이동하는 것은 스레드 스케줄링 효율성을 저하시키므로 권장하지 않습니다.
위 내용은 Mutex Safe 없이 `pthread_cond_signal`을 호출하는 것이 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!