Java /操作系统中的信号灯

时间:2019-03-26 14:53:12

标签: java concurrency mutex semaphore

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

共享变量numberofworks = 0


    EmployeeA 
    {
        while (True) {
            A_works_outside();
            A_works_inside();
            numberofworks =numberofworks + 1;
        }
    }

    EmployeeB
    {
        while (True) {
            B_works_outside();
            B_works_inside();
            numberofworks =numberofworks + 1;
        }
    }

好吧,本练习要使用信号量(P和V)

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

  3. 变量numberofworks必须是numberofworksA + numberofworksB

  4. 的总和

我必须用Java和“操作系统”编写代码 在帮助我进行此练习之前(如果可以的话)在信号量方面的一般性问题: 互斥锁和sempahore之间的基本区别是什么? 以及我该如何理解何时使用互斥锁?

1 个答案:

答案 0 :(得分:0)

尝试使用受互斥对象保护的资源:

    const mouseenter$ = fromEvent(nativeElement, 'mouseenter');
    const mouseleave$ = fromEvent(nativeElement, 'mouseleave');
    const click$ = fromEvent(nativeElement, 'click');

    this.open$ = merge(
      mouseenter$.pipe(mapTo(true)),
      mouseleave$.pipe(mapTo(false)),
      click$.pipe(mapTo(null)),
    ).pipe(
      scan((acc, current) => current === null ? !acc : current, false),
      startWith(false),
      distinctUntilChanged(),
    );

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

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