multithreading - 可以在关键部分进行上下文切换吗?

标签 multithreading

最近我读了一篇比较互斥量和信号量的有趣博客:
"
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/

相关文章:

java - Android中的异步通信

multithreading - 如果线程的主进程被强制结束,线程是否会自动终止?

Java java.util.concurrent.locks.Condition 接口(interface)文档

java - 在同一数据库上运行的不同线程中的多个游标

java - 多线程的新手 - 多线程的最具成本效益的方法?

java - 为什么有关线程的代码显示a = 1和b = 3?为什么添加 "volatile"不起作用?

python - 使用多处理时实例属性不会持续存在

Java 线程屈服/饥饿问题

java - 空闲固定线程池的缺点

java - 计算 Android 中 SHA 迭代的轮次