最近我读了一篇比较互斥量和信号量的有趣博客:
"
http://www.feabhas.com/blog/2009/09/mutex-vs-semaphores-%E2%80%93-part-1-semaphores/
"
引用它:
"
如果在该任务处于临界区时发生上下文切换,并且另一个任务也调用 P(S),则第二个任务(以及任何后续任务)将通过进入等待状态而被阻止进入临界区由操作系统。稍后,第一个任务被重新调度并调用 V(S) 以指示它已离开关键区域。现在将允许第二个任务访问关键区域。
"
如果信号量是这样,那么互斥量也是如此吗?我不认为代码块被锁定是真的,它应该是“原子的”,不能被上下文切换或中断。我对吗?
最佳答案
不,上下文切换几乎可以在任何地方发生。虽然保持锁的时间尽可能短通常是一个好主意,但您不希望您的整个机器锁定只是因为一个进程拥有与内核一样多的线程持有锁,等待某些事情发生,对吗? ?
锁的目的是防止可能干扰锁中代码的代码被执行——它不是阻止系统中每个进程中所有其他代码的执行。 (毕竟,到不同进程的上下文切换仍然是上下文切换。)
关于multithreading - 可以在关键部分进行上下文切换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103578/