【问题标题】:Semaphore in Java/Operating SystemsJava/操作系统中的信号量
【发布时间】:2019-03-26 14:53:11
【问题描述】:

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

共享变量numberofworks = 0

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

嗯,练习要使用信号量(P 和 V)所以

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

  3. 变量numberofworks必须是numberofworksA + numberofworksB的总和

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

【问题讨论】:

  • P=Semaphore.acquireV=Semaphore.release 但这可能完全清楚。 Dijkstra 创造了 P = Dutch passeren = pass,V = vrij geven = give free = release。

标签: java concurrency mutex semaphore


【解决方案1】:

尝试使用受 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!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多