2017-02-02 7 views
1

종종 세마포어로 작업 할 때 스레드간에 동기화를 시행하기 위해 세마포어를 0으로 초기화하는 것이 유용하다고 생각합니다.Posix : 잠긴 상태에서 뮤텍스를 초기화하려면 어떻게해야합니까?

이 방법으로 다른 스레드가 해당 세마포어에 신호를 보낸 후에 만 ​​코드 일부를 실행할 수 있습니다.

뮤텍스로도이 작업을 수행 할 수 있습니까?

내가 더 잘 설명한다. Posix 뮤텍스를 초기화 할 때 (예 : pthread_mutex_init(&mutex,NULL)을 통해) 잠금 해제를 시도하는 첫 번째 스레드가 성공할 수 있도록 일반적으로 잠금 해제 상태에서 초기화된다.

잠긴 상태의 mutex를 초기화하는 방법이 있는지 궁금합니다. 잠긴 상태 (semaphore를 사용하여 sem_init(&sem,0,0)을 사용하는 것과 같습니다). 뮤텍스 또는 일부 속성을 사용하는 것이 좋습니다.

답변

1

유감스럽게도 잠긴 상태의 뮤텍스를 초기화 할 방법이없는 것처럼 보입니다. opengroup에 따르면

pthread_mutex_init() 함수는 ATTR에 의해 지정된 속성 뮤텍스에 의해 참조 뮤텍스를 초기화된다. attr이 NULL이면 기본 뮤텍스 속성이 사용됩니다. 그 효과는 디폴트 뮤텍스 속성 객체의 주소를 전달하는 것과 동일해야한다. 성공적으로 초기화되면 뮤텍스의 상태가 초기화되고 잠금 해제됩니다.

따라서 수동으로 잠 가야합니다. wrapper 함수는 물건을 덜 못생게 만들 수 있습니다 :-)