[問題] concurrent program
question: 使用java 完成semaphore 實作
ans:
public class ExamPractice extends Thread {
public static Object lock = new Object();
public static int A = 1000;
public static int B = 0;
private int amount;
public ExamPractice (int x) {
amount = x;
}
public void run() {
synchronized(lock) {
if (A>=amount) {
A= A-amount;
B= B+amount;
}
}
}
public static void main(String[] args) {
Thread t1= new ExamPractice(100);
Thread t2= new ExamPractice(200);
t1.start();
t2.start();
System.out.println("A= "+A);
System.out.println("B= "+B);
}
}
question:
想要從帳號A轉帳X元到帳號B去, X轉帳100元,X轉帳200元,競爭同步
但是出來的答案A有時候是900,800,700
根本就不正確阿!
請問這樣的critical region哪裡有問題呢?
那個synchronized(lock)根本有加跟沒加一樣說=.=
--
推
06/13 13:55, , 1F
06/13 13:55, 1F
→
06/13 13:58, , 2F
06/13 13:58, 2F
→
06/13 14:37, , 3F
06/13 14:37, 3F
本來有用
try{
t1.join();
t2.join();
} catch () {}
System.out.println("A= "+A);
synchronized(lock) 是不是沒加也一樣呢
這樣還可以算是semaphore的實作嗎?
question: 若限定用c++,java,ada實作semaphore,monitor,message passing
請問各位覺得考試的時候用哪個語言舉例子比較好?
--
爬網路上面的是c++的例子
教科書上寫的是ada的例子
※ 編輯: oak01 來自: 124.218.3.118 (06/13 22:26)
推
06/13 23:16, , 4F
06/13 23:16, 4F
推
06/13 23:19, , 5F
06/13 23:19, 5F
推
06/13 23:21, , 6F
06/13 23:21, 6F
※ 編輯: oak01 來自: 124.218.3.118 (06/14 06:50)
→
06/14 09:18, , 7F
06/14 09:18, 7F
推
06/14 11:26, , 8F
06/14 11:26, 8F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):