PTHREAD_PRIO_INHERIT和PTHREAD_PRIO_PROTECT有什么区别?

问题描述 投票:3回答:1

在以下功能中:

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似乎也是如此。所以我的问题是,两种协议之间有什么区别?

c linux multithreading posix mutex
1个回答
1
投票

the specification in POSIX

简而言之,差异是:

  • 使用PTHREAD_PRIO_INHERIT,持有锁的线程继承了当前争用锁的最高优先级线程的优先级(如果没有其他线程被阻止尝试获取锁,则没有提升优先级)。
  • 使用PTHREAD_PRIO_PROTECT时,持有锁的线程始终以提升优先级运行,而不是由争用锁的其他线程确定,而是由基于每个锁配置的锁的属性(其优先级上限)确定。

您可能还希望看到Wikipedia article on the topic以了解选择其中一个或另一个的动机。

© www.soinside.com 2019 - 2024. All rights reserved.