锁定持有人抢占

时间:2015-06-11 12:05:34

标签: multithreading

您可以在并发程序中使用以下方案吗?

假设一个线程获取一个锁来执行一个关键部分。然后在执行关键部分之前,处理器会抢占该线程。用于执行的新线程需要来自旧线程的锁定(已被抢占)。因此当前线程无法继续(挂起直到被抢占)。操作系统中是否有一种机制在锁被释放之前不允许线程被抢占?

2 个答案:

答案 0 :(得分:1)

在执行临界区时,可以抢占持有互斥锁的线程。如果操作系统切换到的线程尝试获取该互斥锁并发现它已被锁定,则该线程应立即切换出上下文。线程调度程序应该足够聪明,不能切换回该线程,直到它切换回持有互斥锁的线程并释放互斥锁。

答案 1 :(得分:0)

如果您正在编写内核代码,那么是,有一些机制可以阻止线程抢占。

对于标准代码,没有这样的东西。一些操作是原子的,并且由编译器和内核确保原子操作,但在这些操作之后,线程可能被抢占并且它可以保持抢占不确定的时间量(除非系统是实时系统)。