gpt4 book ai didi

c - PTHREAD_PRIO_INHERIT 和 PTHREAD_PRIO_PROTECT 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 15:37:33 26 4
gpt4 key购买 nike

在下面的函数中:

int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr,
int protocol);

您可以为互斥属性定义协议(protocol)。以下协议(protocol)可用:

  • PTHREAD_PRIO_NONE
  • PTHREAD_PRIO_INHERIT
  • PTHREAD_PRIO_PROTECT

我知道何时选择了pthread_prio_inherit,保持锁定的任务获得了您要阻止的所有任务的最高优先级(过程(如果在过程之间共享)或线程之间)。这可以防止优先级反转。但是 PTHREAD_PRIO_PROTECT 似乎也是这样做的。所以我的问题是,这两种协议(protocol)有什么区别?

最佳答案

参见 the specification in POSIX .

简而言之,区别在于:

  • 使用 PTHREAD_PRIO_INHERIT,持有锁的线程继承当前争夺锁的最高优先级线程的优先级(如果没有其他线程试图获取锁被阻塞,则不会提升优先级).

  • 使用 PTHREAD_PRIO_PROTECT,持有锁的线程总是以更高的优先级运行,这不是由其他争用锁的线程决定的,而是由锁的属性(它的优先级上限)决定的)在每个锁的基础上配置。

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

关于c - PTHREAD_PRIO_INHERIT 和 PTHREAD_PRIO_PROTECT 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com