2017-12-23 44 views
3

: 당신은 뮤텍스 속성에 대한 프로토콜을 정의 할 수 있습니다 PTHREAD_PRIO_INHERIT와 PTHREAD_PRIO_PROTECT의 차이점은 무엇입니까? 다음 함수에서

int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, 
    int protocol); 

. 다음 프로토콜을 사용할 수 있습니다

  • PTHREAD_PRIO_NONE
  • PTHREAD_PRIO_INHERIT
  • PTHREAD_PRIO_PROTECT 내가 PTHREAD_PRIO_INHERIT을 선택하면 알 수

는 잠금을 보유 작업 (모든 작업의 ​​가장 높은 우선 순위 (공정를 얻을 수 프로세스간에 공유되는 경우) 또는 스레드). 이것은 우선 순위 역전을 방지합니다. 그러나 PTHREAD_PRIO_PROTECT도 똑같은 것처럼 보입니다. 그래서 내 질문은, 두 프로토콜의 차이점은 무엇입니까?

답변

1

the specification in POSIX을 참조하십시오. 한마디로

, 차이는 아르 : 다른 스레드가 차단되지 않은 경우

PTHREAD_PRIO_INHERIT
  • 이 잠금을 보유 스레드가 현재 잠금을 경쟁 우선 순위가 가장 높은 스레드의 우선 순위 (더 높은 우선 순위를 상속 자물쇠를 얻으려고 노력하는 것). PTHREAD_PRIO_PROTECT

  • 는 잠금을 보유하는 스레드는 항상 잠금 경쟁하는 다른 스레드에 의해 판정 높은 우선 순위로 실행되지만 당 잠금으로 구성 잠금 (그 우선 순위 천장)의 속성에 의해.

당신은 하나 또는 다른 선택 될 수있는 동기를 이해하기 위해 Wikipedia article on the topic를 볼 수 있습니다.