PTHREAD_PRIO_INHERIT和PTHREAD_PRIO_PROTECT有什么区别?

7
在下面的函数中:
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个回答

4
请参考POSIX规范
简而言之,它们的区别如下:
  • PTHREAD_PRIO_INHERIT:持有锁的线程继承当前竞争该锁的最高优先级线程的优先级(如果没有其他线程正在尝试获取锁,则不提高优先级)。

  • PTHREAD_PRIO_PROTECT:持有锁的线程始终以提高的优先级运行,其优先级不由竞争该锁的其他线程决定,而是由每个锁配置的属性(其优先级上限)决定。

您可能还想查看维基百科文章以了解为什么会选择其中之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接