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