Code nsx-ntd
I. Triết gia ăn cơm
semaphore chopstick[5] = {1,1,1,1,1,1};
void Philosopher(int i){ //tiến trình P(i)
for(;;){ //lặp vô hạn
Wait(chopstick[i]); //lấy đũa bên trái
Wait(chopstick[(i+1)%5]); //lấy đũa bên phải
<Ăn cơm>
Signal(chopstick[(i+1)%5]);
Signal(chopstick[i]);
<Suy nghĩ>
}
}
void main(){
// chạy đồng thời 5 tiến trình
StartProcess(Philosopher(0));
...
StartProcess(Philosopher (4));
}
II.Bài toán người sản xuất người tiêu dùng
Const int N; // kích thước bộ đệm Semaphore empty = 0;
Semaphore lock = 1; Semaphore full = N
Void producer () {
for (; ;) {
<sản xuất>
wait (full);
wail (lock);
<thêm 1 sản phẩm vào bộ đệm>
signal (lock);
signal (empty);
}
}
Void consumer() {
for (; ;) {
wait (empty);
wail (lock);
<lấy 1 sản phẩm từ bộ đệm>
signal (lock);
signal (full);
<tiêu dùng>
}
}
Void main() {
startProcess(producer); startProcess(consumer);
}
Bạn đang đọc truyện trên: TruyenTop.Vip