问题标签 [priority-inversion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
769 浏览

c - SCHED_IDLE 实际上是否会阻止在非空闲内核上执行?

我正在尝试在没有优先级继承互斥体的情况下,使用SCHED_IDLE. 该测试适用于SCHED_FIFO不同的实时优先级(非 PI 互斥锁的死锁,立即使用 PI 互斥锁解决),但要将其包含在将在没有实时权限的情况下运行的测试集中,我想使用SCHED_IDLE“中等”和“高”优先级线程都存在SCHED_OTHER(在这种情况下,它并不是真正的优先级“反转”,但这个概念应该仍然有效——“中”线程应该排除“低”线程的执行)。

不幸的是,该测试无法区分 PI 和非 PI 互斥体。无论哪种方式,它都会取得进展。显然,SCHED_IDLE即使有另一个可运行的任务,该任务也在运行。CPU 亲和性已设置为将它们全部绑定到同一个内核,这样低优先级的任务就不能迁移到不同的内核运行。而且我知道SCHED_IDLE任务应该在内核空间中以提升的权限运行以防止内核空间优先级反转,所以我尝试通过在用户空间中使其忙循环来确保“低”线程不会进入内核空间,并且strace没有迹象表明它在不应该取得进展的时间内进行系统调用。

Linux是否SCHED_IDLE只允许在内核实际上不空闲时运行空闲任务?或者还有什么我可能会错过的吗?

这是测试代码,稍作修改,以便它可以在实时模式下运行,或者SCHED_IDLE

0 投票
1 回答
80 浏览

multithreading - 这会导致类似于优先级倒置的问题吗

我的项目有一个做法是在写入文件时降低线程的优先级,并在写入操作完成后将其改回。这样做是因为文件写入操作可能会占用重要的资源、时间并限制其他重要线程执行其任务。

但是,假设我的线程以 30 的优先级运行。在文件写入操作期间,我将优先级更改为 5。这是否意味着其他优先级为 10 的线程可以阻塞我通常优先级为 30 的线程.

我知道这听起来像是优先级倒置,但在我的研究中,优先级倒置场景通常涉及一个关键部分,但我的场景不涉及一个。我们的应用程序使用 RR 调度策略,但操作系统(QNX)同时使用 RR 和 FIFO。任何帮助表示赞赏。

0 投票
2 回答
256 浏览

mutex - 如果更改任务的优先级,FreeRTOS 互斥优先级继承问题

这是我不确定是否会出现问题的情况。

现在在其他一些任务中,它可能会改变任务 A 和 B 的优先级。假设任务 B 调用 Foo 并获取互斥锁。现在,当 B 拥有互斥锁时,任务 A 调用 foo 并尝试获取互斥锁。由于互斥体的优先级继承,任务 B 现在将成为任务 A 的优先级,即 5。

问题是,在任务 B 放开互斥锁后,它会返回什么优先级?它会回到原来的优先级 1 还是保持其设定值。如果场景是任务 A 更改为更低或更高的优先级值,那该怎么办。这种情况是否有任何排列会导致意外行为?