> 백엔드 개발 > C++ > Mutex Safe 없이 `pthread_cond_signal`을 호출하는 것이 안전합니까?

Mutex Safe 없이 `pthread_cond_signal`을 호출하는 것이 안전합니까?

DDD
풀어 주다: 2024-12-03 16:53:10
원래의
508명이 탐색했습니다.

Is Calling `pthread_cond_signal` Without a Mutex Safe?

뮤텍스 없이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿