在以下功能中:
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr,
int protocol);
您可以为互斥锁属性定义协议。 可以使用以下协议:
我知道当选择PTHREAD_PRIO_INHERIT时,持有锁的任务将获得阻止所有任务(进程(如果在进程之间共享)或线程)的最高优先级。这可以防止优先级倒置。但是PTHREAD_PRIO_PROTECT似乎也是如此。所以我的问题是,两种协议之间有什么区别?
答案 0 :(得分:1)
请参阅the specification in POSIX。
简而言之,差异在于:
使用PTHREAD_PRIO_INHERIT
,持有锁的线程会继承当前争用锁的最高优先级线程的优先级(如果没有其他线程被阻止尝试获取锁,则没有提升优先级。)< / p>
使用PTHREAD_PRIO_PROTECT
,持有锁的线程始终以提升的优先级运行,而不是由争用锁的其他线程确定,而是由锁的属性(其优先级上限)按锁定配置。
您可能还希望看到Wikipedia article on the topic了解选择其中一方的动机。