B_QuRT_User_Guide(11)

240 篇文章 11 订阅

7 Priority Inheritance Mutexes

QuRT支持递归互斥的一个变种,即优先继承互斥。
优先级继承互斥在功能上等同于递归互斥(第6节),只是它们使线程在锁定互斥后可以执行优先级继承。

  • 如果一个线程锁定了一个优先级继承互斥,而另一个具有更高优先级的线程(第3节)在该互斥上被暂停,拥有锁的线程就会获得被暂停线程的更高优先级。
  • 如果多个线程在一个优先级继承互斥上被暂停,拥有锁的线程将获得被暂停的最高优先级的线程的优先级(如果它比线程的原始优先级高。
    优先级的变化是暂时的–当一个线程解锁一个优先级继承的突变体时,它的线程优先级会恢复到原来的值。
    除了在函数名称中从mutex改为pimutex外,普通的和优先级继承的mutex操作是相同的。
    注意:对于优先级继承的mutex,尝试锁操作处理嵌套锁,就像mutex被解锁一样。
    优先继承的mutex是共享对象,支持以下操作:
  • qurt_pimutex_init()
  • qurt_pimutex_destroy()
  • qurt_pimutex_lock
  • qurt_pimutex_try_lock() - qurt_pimutex_unlock()

7.1 qurt_pimutex_init()

7.1.1 Function Documentation

7.1.1.1 void qurt_pimutex_init ( qurt_mutex_t ∗ lock )

初始化一个优先级继承的mutex对象。优先级继承的mutex最初是被解锁的。
这个函数的作用与qurt_mutex_init()相同。
注意:每个基于pimutex的对象都有一个或多个与之相关的内核资源;为了防止资源泄漏,当这个对象不再被使用时,请调用qurt_pimutex_destroy()。
相关数据类型
qurt_mutex_t
参数在这里插入图片描述
返回值
None.
依赖关系
None.

7.2 qurt_pimutex_destroy()

7.2.1 Function Documentation

7.2.1.1 void qurt_pimutex_destroy ( qurt_mutex_t ∗ lock )

销毁指定的优先级继承的突变体。
注意:当优先级继承突变体不再被使用时,必须将其销毁。如果不这样做,会导致QuRT内核的资源泄漏。
优先级继承的突变体不能在仍在使用时被销毁。如果发生这种情况,QuRT的行为将无法定义。
相关数据类型
qurt_mutex_t
参数
在这里插入图片描述
返回值
None.
依赖关系
None.

7.3 qurt_pimutex_lock

7.3.1 Function Documentation

7.3.1.1 void qurt_pimutex_lock ( qurt_mutex_t ∗ lock )

请求访问一个共享资源。如果一个线程对一个没有被使用的突变体执行了锁操作。
该线程将获得对该突变体所保护的共享资源的访问权,并继续执行。
如果一个线程对一个已经被另一个线程使用的突变体执行锁操作,该线程将被暂停。当该突变体再次变得可用时(因为其他线程已经解锁),该线程会被唤醒并获得对共享资源的访问。
如果一个线程在优先级继承的mutex上被暂停,而被暂停的线程的优先级高于锁定mutex的线程的优先级,那么拥有mutex的线程就会获得被暂停线程的更高优先级。锁定的线程会阻塞,直到锁可用为止。
注意。
如果一个线程锁定了它自己已经锁定的优先级继承的mutex,那么它就不会被暂停。然而,在该线程对该突变体执行平衡数量的解锁之前,该突变体不会对其他线程可用。
当多个线程争夺一个突变体时,优先继承突变体的锁操作比递归突变体的锁操作要慢。特别是,当突变体可用于锁定时,它的速度要慢10倍左右,而当突变体已经被锁定时,它的速度会更慢(时间上有很大差异)。
相关数据类型
qurt_mutex_t
参数
在这里插入图片描述
返回值
None.
依赖关系
None.

7.4 qurt_pimutex_try_lock()

7.4.1 Function Documentation

7.4.1.1 int qurt_pimutex_try_lock ( qurt_mutex_t ∗ lock )

请求访问一个共享资源(没有暂停)。试图锁定指定的优先级继承的
mutex。
如果一个线程在一个未被使用的优先级继承突变上执行try_lock操作,该线程将获得对受该突变保护的共享资源的访问,并继续执行。如果一个线程在一个已经被其他线程使用的优先级继承突变上执行try_lock操作,qurt_pimutex_try_lock立即返回一个非零的结果值。
相关数据类型
qurt_mutex_t
参数
在这里插入图片描述
返回值
0 – Success. Nonzero – Failure.
依赖关系
None.

7.5 qurt_pimutex_unlock()

7.5.1 Function Documentation

7.5.1.1 void qurt_pimutex_unlock ( qurt_mutex_t ∗ lock )

释放对共享资源的访问;解锁指定的优先级继承互斥。
在一个优先级继承的mutex上可以有多个线程被暂停。当mutex被解锁时,只有在mutex上等待的最高优先级的线程被唤醒。如果被唤醒的线程比当前线程的优先级高,就会发生上下文切换。
当一个线程解锁一个优先级继承的突变体时,它的线程优先级被恢复到它的原始值,即从另一个暂停在该突变体上的线程获得的任何更高的优先级值。
相关数据类型
qurt_mutex_t
参数
在这里插入图片描述
返回值
None.
依赖关系
None.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值