Mình đang ôn Hệ Điều Hành tới Semaphore thì gặp bài tập này. Anh em nào vào giải thích giùm mình với.
Đề : Xét 2 tiến trình A,B
Proces A
{
while(1)
Na=Na+1;
}
Process B
{
while(1)
Nb=Nb+1;
}
Đồng bộ hóa 2 tiến trình trên dùng Semaphore, sao cho tại mọi thời điểm bất kì : Nb<Na<=Nb+10.
Đây là bài giải :
Mình không hiểu rõ lắm ở chỗ.
1> Process A thực hiện trước Process B 10 lần . Sau đó thì trình tự thực hiên là: A->B->A->B.... luân phiên
2>Process A thực hiện trước Process B 10 lần sau. Sau đó Process B thực hiện 10. Rồi lặp lại A 10 lần-> B 10 lần->A 10 lần....... luân phiên
Vậy thì hiểu theo ý 1 hay ý 2 là đúng ? Mình nghĩ là ý 2 nhưng không chắc lắm nên hỏi anh em. Anh em nào giải thích giùm mình với. Thank trước:nose:
Đề : Xét 2 tiến trình A,B
Proces A
{
while(1)
Na=Na+1;
}
Process B
{
while(1)
Nb=Nb+1;
}
Đồng bộ hóa 2 tiến trình trên dùng Semaphore, sao cho tại mọi thời điểm bất kì : Nb<Na<=Nb+10.
Đây là bài giải :
Code:
Process A { while(1) { Wait(S21); Na=Na+1; Signal(S12); } } Process B { while(1) { Wait(S12); Nb=Nb+1; Signal(S21); } } Khởi tạo: S21= 10; S12=0;
1> Process A thực hiện trước Process B 10 lần . Sau đó thì trình tự thực hiên là: A->B->A->B.... luân phiên
2>Process A thực hiện trước Process B 10 lần sau. Sau đó Process B thực hiện 10. Rồi lặp lại A 10 lần-> B 10 lần->A 10 lần....... luân phiên
Vậy thì hiểu theo ý 1 hay ý 2 là đúng ? Mình nghĩ là ý 2 nhưng không chắc lắm nên hỏi anh em. Anh em nào giải thích giùm mình với. Thank trước:nose:
Comment