Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux pthread_mutex_解锁即时上下文切换吗?_Linux_Multithreading_Real Time - Fatal编程技术网

Linux pthread_mutex_解锁即时上下文切换吗?

Linux pthread_mutex_解锁即时上下文切换吗?,linux,multithreading,real-time,Linux,Multithreading,Real Time,在互斥体上调用pthread\u mutex\u unlock,另一个具有更高实时优先级的线程正在等待该互斥体。上下文切换是在这样的系统调用期间完成的,还是线程只有在量子结束后才会被抢占? 如果在这种情况下不能保证立即上下文切换,那么在每次pthread\u mutex\u unlock之后立即调用sched\u yield是否是一个好主意 在互斥体上调用pthread_mutex_unlock,另一个具有更高实时优先级的线程正在等待该互斥体。上下文切换是在这样的系统调用期间完成的,还是线程只有

在互斥体上调用
pthread\u mutex\u unlock
,另一个具有更高实时优先级的线程正在等待该互斥体。上下文切换是在这样的系统调用期间完成的,还是线程只有在量子结束后才会被抢占? 如果在这种情况下不能保证立即上下文切换,那么在每次
pthread\u mutex\u unlock
之后立即调用
sched\u yield
是否是一个好主意

在互斥体上调用pthread_mutex_unlock,另一个具有更高实时优先级的线程正在等待该互斥体。上下文切换是在这样的系统调用期间完成的,还是线程只有在量子结束后才会被抢占

通常,如果没有其他内核可用于运行更高优先级的线程,则解锁线程将被抢占

如果在这种情况下不能保证立即上下文切换,那么在每次pthread_mutex_解锁后立即调用sched_yield好吗

这不是保证,也不可能。另一个线程可能尚未准备好运行

在pthread_mutex_解锁后立即调用sched_yield是个糟糕的主意。即使是低优先级线程也会通过缓存争用之类的事情损害高优先级线程的性能,因此使用不必要的额外上下文切换使低优先级线程效率低下将损害高优先级线程


如果它没有坏,就不要修理它。实现理解优先级并将尽最大努力。

因此,当解锁线程被抢占时-在从
pthread\u mutex\u unlock
返回之前或更高时间(通过计时器IRQ)返回时,如果只有一个具有更高实时优先级的线程正在等待该互斥锁,还有单核CPU?@Marik您的实现将尽其所能。你没有使用实时操作系统,所以它不会对这样的事情做出硬保证。