【发布时间】:2018-04-12 09:34:25
【问题描述】:
信号量是操作系统创建的数据结构,用于在进程之间提供同步和创建互斥。 wait() 和 signal() 是操作系统为了管理信号量而调用的方法,这些方法不能被中断服务程序信号中断。
我想知道 wait() 和 signal() 方法之间的关键区域代码是否可以中断?
【问题讨论】:
标签: semaphore critical-section
信号量是操作系统创建的数据结构,用于在进程之间提供同步和创建互斥。 wait() 和 signal() 是操作系统为了管理信号量而调用的方法,这些方法不能被中断服务程序信号中断。
我想知道 wait() 和 signal() 方法之间的关键区域代码是否可以中断?
【问题讨论】:
标签: semaphore critical-section
是的,它们可以仅仅因为定义本身没有提出这样的限制而被打断。
在并发编程中,对共享资源的并发访问可能导致意外或错误的行为,因此访问共享资源的程序部分受到保护。这个受保护的部分是临界区或临界区。它一次不能由多个进程执行。
所以关键部分要求互斥,但它没有说明原子性。
所以是的,wait() 和 signal() 方法之间的临界区代码可以被中断,但是一个好的同步结构是,一旦进程/线程进入临界区,即使该进程稍后被中断,其他进程也不会可以进入临界区。
【讨论】: