嘿大家,我有一個任務在學校表演,真的不知道如何開始。 我不想要整個解決方案,而是提示以及如何開始使用。對不起,但我是編程新手。這裏的任務:使用信號量和共享變量進行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