信号量
信号量
某企业的生产流水线上有2名工人P1和P2,1名检验员P3。P1将初步加工的半成品放入半成品箱B1;P2从半成品箱B1取出继续加工,加工好的产品放入成品箱B2;P3从成品箱B2取出产品检验。假设B1可存放n件半成品,B2可存放m件产品,并设置6个信号量S1、S2、S3、S4、S5和S6,且S3和S6的初值都为0。采用PV操作实现P1、P2和P3的同步模型如下图所示,则信号量S1和S5 ( ) ;S2、S4的初值分别为 ( ) 。
第一题:
- A、分别为同步信号量和互斥信号量,初值分别为0和1
- B、都是同步信号量,其初值分别为0和0
- C、都是互斥信号量,其初值分别为1和1
- D、都是互斥信号量,其初值分别为0和1
第二题:
- A、 n、0
- B、 m、0
- C、 m、n
- D、 n、m
第1小题的正确的答案为C。因为信号量S1是一个互斥信号量,表示半成品箱B1当前有无工人(生产者)使用, 所以初值为1。信号量S5也是一个互斥信号量,表示成品箱B2当前有无工人或检验员使用,所以初值为1。
第2小题的正确的答案为D。信号量S2表示半成品箱B1的容量,故S2的初值为n。当工人P1不断地将其工序上加工的半成品放入半成品箱B1时,应该先测试半成品箱是否有空位,故工人P1使用P(S2),当工人P2从半成品箱取一件半成品时,半成品箱B1就空出一个空位,故工人P2使用V(S2)释放空间。
同理,信号量S4表示成品箱B2的容量,故S4的初值为m。当工人P2完成一件产品放入成品箱B2时,应该先测试成品箱是否有空位,故工人P2使用P(S4),当检验员P3从成品箱取一件产品检验时,成品箱B2就空出一个空位,故检验员P3使用V(S4)释放空间。
什么是互斥信号量、什么是同步信号量?
在多线程编程中,同步信号量(synchronization semaphore)和互斥信号量(mutex semaphore)是两种常用的同步机制。它们都是通过操作信号量来实现线程之间的同步和互斥访问共享资源。
同步信号量(Synchronization Semaphore): 同步信号量用于实现线程之间的同步,确保线程按照特定的顺序执行。它是一种计数信号量,初始值通常为0,当线程需要等待某个条件满足时,会调用等待(wait)操作,如果条件不满足,线程将被阻塞,直到其他线程通过发信号(signal)操作将信号量的计数值增加,使得条件满足,阻塞的线程被唤醒并继续执行。同步信号量常用于解决生产者-消费者问题、线程的顺序执行等场景。 互斥信号量(Mutex Semaphore): 互斥信号量用于实现线程之间的互斥,确保同一时间只有一个线程能够访问共享资源。它是一种二进制信号量,初始值通常为1,当线程需要访问共享资源时,会调用加锁(lock)操作,如果互斥信号量的计数值为1,则线程可以继续执行临界区代码,并将互斥信号量的计数值减1,表示锁定资源。如果互斥信号量的计数值为0,表示资源已被其他线程锁定,当前线程将被阻塞,直到资源解锁,即其他线程释放锁,互斥信号量的计数值变为1。互斥信号量常用于解决竞争条件和避免多线程访问共享资源的冲突。