首页 > 解决方案 > Java/操作系统中的信号量

问题描述

我是论坛和一般编程的新手。目前我学习“操作系统”和 Java。本周我们开始讨论“信号量”这个话题,在我看来这有点令人困惑。我有这个练习:

共享变量 numberofworks = 0

    员工A
    {
        而(真){
            A_works_outside();
            A_works_inside();
            作品数 = 作品数 + 1;
        }
    }

    员工B
    {
        而(真){
            B_works_outside();
            B_works_inside();
            作品数 = 作品数 + 1;
        }
    }

好吧,练习想使用信号量(P 和 V)所以

  1. 在 EmployeeA 的 i 重复中,A_works_inside()仅在 B_works_outside() 完成时运行
  2. 在 EmployeeB 的 i 重复中,Β_works_inside()仅在 Α_works_outside() 完成时运行

  3. 变量numberofworks必须是numberofworksA + numberofworksB

在帮助我完成这个练习之前,我必须用 Java 和“操作系统”编写代码(如果你当然可以的话) 信号量中的一般问题:互斥量和信号量之间的基本区别是什么?我应该如何理解何时使用互斥锁?

标签: javaconcurrencymutexsemaphore

解决方案


尝试使用受 Mutex 保护的资源:

- Hi! Can I ?
*If free*
- Yup go on.
*Else*
- No, go away!

尝试使用受信号量保护的资源:

- Hi! Can I ?
*If free*
- Yup go on.
*Else*
- No, wait in the queue!

推荐阅读