嘿大家,我有一个任务在学校表演,真的不知道如何开始。 我不想要整个解决方案,而是提示以及如何开始使用。对不起,但我是编程新手。这里的任务:使用信号量和共享变量进行Java编程
公告板(40p)用于张贴公寓租金公告。每份租赁通知都包含3个带有电话号码的可撕式标签。一群n学生扫描寻找公寓的董事会。每个学生随机选择3个不同的公寓,并尝试从3个相应的通知中删除一个标签。如果学生成功选择了他/她选择的3个选项卡,他/她将离开,否则他/她不会占用任何时间,随机停留一段时间,然后再次尝试选择3个不同的公寓。当所有学生都离开时,模拟结束。假设董事会有空间进行综合报告(n/3)通知。开发一个并行程序,模拟学生仅使用信号进行同步的动作。将学生表示为并发进程。务必声明并初始化您用于进程交互和同步的共享变量。尝试最大化并发。马上解释你的解决方案是如何工作的以及它如何避免死锁。
更新包括为答案提供信息
这里是我到目前为止的代码!我在正确的方向!?
private static Semaphore[] apartments;
public void setApartments()
{
apartments = new Semaphore[3];
for(int i = 0; i < 3; i++)
apartments[i] = new Semaphore(3);
}
@Override
public void run()
{
setApartments();
Random random = new Random();
while(counter < 3)
{
try
{
acquired = apartments[random.nextInt(3)].tryAcquire();
if(acquired)
System.out.println("Student" + id + " succeded.");
else
System.out.println("Student" + id + " failed.");
counter++;
}
catch(Exception e) {e.printStackTrace();}
}
}
我有一个问题,我不明白。 我有4个线程在同一时间运行,一次说一个许可证: 静态信号标签A =新的信号量(3);
所以我的线程将永远运行的原因,它没有得到任何。但如果我使用tabsA.release();当线程不符合要求时,即使在Semaphore(3)中有3个许可证时,所有四个线程都可以获得许可证。我甚至可以跑10次,它会起作用。怎么来的?
你需要使用这个:http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html,据推测 – 2011-04-20 18:11:00
因此,考虑到课程讲座和书籍/参考信息,**解释如何接近解决方案的一些想法/想法/算法。在这个大纲中不需要任何Java特定的东西 - 只需使用类(和“仅使用信号量”)中讲授的并行/并发概念。 – 2011-04-20 18:12:27