다른 스레드가 가변 플래그를 사용하지 않으면 마스터 스레드가 깨우기 신호를 놓치지 않도록하는 안전한 방법입니까?cond 신호가 누락되지 않도록하는 안전한 방법
void *Cancel_master_thread(void *arg)
{
while (1)
{
flag = 0;
pthread_mutex_lock(&cancel_in_progress);
flag = 1;
pthread_cond_wait(&cancel_finished, &cancel_in_progress);
pthread_mutex_unlock(&cancel_in_progress);
}
}
void *Cancel_slave_MB()
{
while (1)
{
while (flag != 1)
{
}
pthread_mutex_lock(&cancel_in_progress);
pthread_cond_signal(&cancel_finished);
pthread_mutex_unlock(&cancel_in_progress);
}
}
을하지만 내가 원하는 건 잠을 마스터입니다 슬레이브로부터의 신호가 도착한다. 따라서 플래그가 값 1을 얻으면 마스터는 잠자기 상태가되고 슬레이브 만 뮤텍스를 잠그고 신호를 보낼 수 있습니다. 맞지 않아? 다중 프로세서 시스템의 경우 스레드가 동시에 실행됩니다. 그렇다면 문제는 어디에 있습니까? 뮤텍스 cancel_in_progress의 잠금을 해제 한 후에 슬레이브가 잠자기 상태가되었음을 언급하는 것을 잊어 버렸습니다. 게시 된 코드에서 pthread_cond_wait 명령을 결론 지우지 않았습니다. – iiirxs
예 그들은 오랜 시간 동안 제대로 실행되지만 어떻게 든 마스터 스레드가 일어나서 모든 것이 멈 춥니 다. – iiirxs