在互斥锁上调用pthread_mutex_unlock
,而具有更高实时优先级的另一个线程正在等待该互斥锁。将在这样的系统调用期间完成上下文切换,或者线程将仅在量子结束后被抢占?
如果在这种情况下无法保证立即进行上下文切换,最好在每个sched_yield
之后立即致电pthread_mutex_unlock
吗?
答案 0 :(得分:2)
在互斥锁上调用pthread_mutex_unlock,而另一个具有更高实时优先级的线程正在等待该互斥锁。将是在这样的系统调用期间完成的上下文切换,还是线程将仅在量子结束后被抢占?
通常,如果没有其他核心可用于运行优先级较高的线程,则解锁线程将被抢占。
如果在这种情况下不能立即保证上下文切换,最好在每次pthread_mutex_unlock后立即调用sched_yield吗?
不保证,也不是。另一个线程可能不准备运行。
在pthread_mutex_unlock之后立即调用sched_yield是一个糟糕的主意。即使是低优先级的线程也会通过缓存争用等方式损害高优先级线程的性能,因此使用不必要的额外上下文切换使低优先级线程效率低下会损害高优先级线程。
如果没有损坏,请不要修理它。实施了解优先事项并将尽力而为。