SlideShare a Scribd company logo
11/8/2005 Traàn Haïnh Nhi
Baøi oân taäp: Ñoàng boä hoaù tieán trình
Caâu 1 : 2 nhu caàu trao ñoåi thoâng tin cuûa tieán trình nhaèm :
a. Chia seû taøi nguyeân chung, Phoái hôïp hoaït ñoäng
b. Xöû lyù song song , Phoái hôïp hoaït ñoäng
c. Baûo ñaûm ñoäc laäp, Thoâng baùo loãi
Ñaùp aùn : a
11/8/2005 Traàn Haïnh Nhi
Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình
Caâu 2 : Race Condition laø
a. Keát quaû thöïc hieän tieán trình phuï thuoäc vaøo keát quaû ñieàu phoái
b. Hieän töôïng caùc tieán trình chia seû taøi nguyeân chung
c. Keát quaû tieán trình thöïc hieän luoân luoân sai
Ñaùp aùn : a
11/8/2005 Traàn Haïnh Nhi
Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình
Caâu 3 : Critical section laø
a. Taøi nguyeân duøng chung giöõa caùc tieán trình
b. Cô cheá baûo veä taøi nguyeân duøng chung
c. Ñoaïn chöông trình coù khaû naêng gaây ra hieän töôïng race condition
d. Ñoaïn chöông trình coù truy caäp taøi nguyeân duøng chung
Ñaùp aùn : c
11/8/2005 Traàn Haïnh Nhi
Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình
Caâu 4 : 2 nhu caàu ñoàng boä tieán trình laø :
a. Hoø heïn , Phoái hôïp hoaït ñoäng
b. Trao ñoåi thoâng tin, Phoái hôïp hoaït ñoäng
c. Ñoäc quyeàn truy xuaát , Giaûi quyeát tranh chaáp
d. Khoâng coù caâu naøo ñuùng
Ñaùp aùn : d
11/8/2005 Traàn Haïnh Nhi
Caâu 5 : Cho bieát caùc ñieàu kieän cho moät giaûi phaùp ñoàng boä
toát
Ñaùp aùn :
Mutual Exclusion : Khoâng coù hai tieán trình cuøng ôû trong mieàn
gaêng cuøng luùc
Progess : Moät tieán trình taïm döøng beân ngoaøi mieàn gaêng
khoâng ñöôïc ngaên caûn caùc tieán trình khaùc vaøo mieàn gaêng
Bounded Waiting : Khoâng coù tieán trình naøo phaûi chôø voâ haïn
ñeå ñöôïc vaøo mieàn gaêng.
Khoâng coù giaû thieát naøo ñaët ra cho söï lieân heä veà toác ñoä
cuûa caùc tieán trình, cuõng nhö veà soá löôïng boä xöû lyù trong
heä thoáng
Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình
Caâu 6 : Xeùt giaûi phaùp phaàn meàm do Dekker ñeà nghò ñeå toå chöùc truy xaát ñoäc quyeàn cho hai
tieán trình . Hai tieán trình P0, P1 chia seû caùc bieán sau :
var flag : array [0..1] of boolean; (khôûi ñoäng laø false)
turn : 0..1;
Caáu truùc moät tieán trình Pi ( i =0 hay 1, vaø j laø tieán trình coøn laïi ) nhö sau :
repeat
flag[i] := true;
while flag[j] do
if turn = j then
begin flag[i]:= false;
while turn = j do ;
flag[i]:= true;
end;
critical_section();
turn:= j;
flag[i]:= false;
non_critical_section();
until false;
Giaûi phaùp naøy coù phaûi laø moät giaûi phaùp ñuùng thoûa maõn 4 yeâu caàu khoâng ?
11/8/2005 Traàn Haïnh Nhi
Caâu 6: Ñaùp aùn
Ñuùng.
Giaûi phaùp naøy baûo ñaûm yeâu caàu ñoäc quyeàn truy xuaát vì khi
caû 2 tieán trình Pi vaø Pj ñoàng thôøi quan taâm ñeán vieäc vaøo mieàn
gaêng (flag[i]=true vaø flag[j]=true) thì chæ coù moät tieán trình
ñöôïc vaøo mieàn gaêng tuøy theo giaù trò cuûa turn.
Neáu tieán trình Pi ñang xöû lyù Non_criticalsection, thì tröôùc ñoù
flag[i] ñaõ ñöôïc gaùn giaù trò false, do vaäy khoâng ngaên caûn Pj
quay laïi criticalsection
Caâu 7 : Xeùt giaûi phaùp ñoàng boä hoaù sau :
while (TRUE) {
int j = 1-i;
flag[i]= TRUE; turn = i;
while (turn == j && flag[j]==TRUE);
critical-section ();
flag[i] = FALSE;
Noncritical-section ();
}
Ñaây coù phaûi laø moät giaûi phaùp baûo ñaûm ñöôïc ñoäc quyeàn truy xuaát khoâng ?
Ñaùp aùn :
Khoâng. Xeùt tình huoáng khi flag[0] =1; turn =0=> P0
vaøo CS, neáu luùc ñoù flag[1]= 1, P1 coù theå gaùn turn = 1
vaø vaøo luoân CS !
Caâu 8 : Giaû söû moät maùy tính khoâng coù chæ thò TSL, nhöng coù chæ thò Swap coù khaû naêng hoaùn
ñoåi noäi dung cuûa hai töø nhôù chæ baèng moät thao taùc khoâng theå phaân chia :
procedure Swap() var a,b: boolean);
var temp : boolean;
begin
temp := a;
a:= b;
b:= temp;
end;
Söû duïng chæ thò naøy coù theå toå chöùc truy xuaát ñoäc quyeàn khoâng ? Neáu coù, xaây döïng caáu
chöông trình töông öùng.
11/8/2005 Traàn Haïnh Nhi
Caâu 8: Ñaùp aùn
while (TRUE)
{
key = TRUE;
while ( key = TRUE)
Swap(lock,key);
critical-section ();
lock = false;
Noncritical-section();
}
Caâu 9 : Xeùt hai tieán trình sau :
process A { while (TRUE) na = na +1; }
process B { while (TRUE) nb = nb +1; }
a. Ñoàng boä hoaù xöû lyù cuûa hai tieán trình treân, söû duïng hai semaphore
toång quaùt, sao cho taïi baát kyø thôøi ñieåm naøo cuõng coù nb < na <= nb
+10
b. Neáu giaûm ñieàu kieän chæ laø na <= nb +10, giaûi phaùp cuûa baïn seõ ñöôïc
söûa chöõa nhö theá naøo ?
c. Giaûi phaùp cuûa baïn coù coøn ñuùng neáu coù nhieàu tieán trình loaïi A vaø B
cuøng thöïc hieän?
11/8/2005 Traàn Haïnh Nhi
Caâu 9: Ñaùp aùn
Ñaùp aùn : semaphore a = ; b = ;
Process A()
{
int item;
while (TRUE)
{
down(b);
na = na + 1;
up(a);
}
}
Process B()
{
int item;
while (TRUE)
{
down(a);
nb = nb + 1;
up(b);
}
}
0 10
Caâu 10 :
Moät bieán X ñöôïc chia seû bôûi hai tieán trình cuøng thöïc hieän ñoaïn code
sau :
do
X = X +1;
if ( X == 20) X = 0;
while ( TRUE );
Baét ñaàu vôùi giaù trò X = 0, chöùng toû raèng giaù trò X coù theå vöôït quaù 20.
Caàn söûa chöõa ñoaïn chöông trình treân nhö theá naøo ñeå baûo ñaûm X
khoâng vöôït quaù 20 ?
11/8/2005 Traàn Haïnh Nhi
Caâu 10: Ñaùp aùn
Ñaùp aùn :
Semaphore mutex = 1;
do
{
down(mutex);
X = X +1;
if ( X == 20) X = 0;
up(mutex);
}while ( TRUE );
Caâu 11 :
Xeùt hai tieán trình xöû lyù ñoaïn chöông trình sau :
process P1 { A1 ; A2 } process P2 { B1 ; B2 }
Ñoàng boä hoaù hoaït ñoäng cuûa hai tieán trình naøy sao cho caû A1 vaø B1 ñeàu
hoaøn taát tröôùc khi A2 hay B2 baét ñaàu .
11/8/2005 Traàn Haïnh Nhi
Caâu 11: Ñaùp aùn
Ñaùp aùn : semaphore ab = ; ba = ;0 0
Process A()
{
A1;
up(ba);
down(ab);
A2;
}
Process B()
{
B1;
up(ab);
down(ba);
B2;
}
Caâu 12 :
Toång quaùt hoaù caâu hoûi 8) cho caùc tieán trình xöû lyù ñoaïn chöông trình
sau :
process P1 { for ( i = 1; i <= 100; i ++) Ai }
process P2 { for ( j = 1; j <= 100; j ++) Bj }
Ñoàng boä hoaù hoaït ñoäng cuûa hai tieán trình naøy sao cho caû vôùi k baát kyø
( 2 ≤ k ≤ 100), Ak chæ coù theå baét ñaàu khi B(k-1) ñaõ keát thuùc, vaø Bk chæ
coù theå baét ñaàu khi A(k-1) ñaõ keát thuùc.
11/8/2005 Traàn Haïnh Nhi
Caâu 12: Ñaùp aùn
Ñaùp aùn : semaphore ab = ; ba = ;
Process A()
{
for ( i = 1; i<=100; i++)
{
down(ab);
Ai;
up(ba);
}
}
Process B()
{
for ( i = 1; i<=100; i++)
{
down(ba);
Bi;
up(ab);
}
1 1
Caâu 13 :
Söû duïng semaphore ñeå vieát laïi chöông trình sau theo moâ hình xöû lyù
ñoàng haønh:
w := x1 * x2
v := x3 * x4
y := v * x5
z := v * x6
y := w * y
z := w * z
ans := y + z
11/8/2005 Traàn Haïnh Nhi
Ñaùp aùn :
process P1
{ w := x1 * x2 ;
up(s15) ;
up(s16) ;
}
process P2
{ v := x3 * x4 ;
up(s23) ;
up(s24) ;
}
process P3
{
down(s23) ;
y := v * x5 ;
up(s35) ;
}
process P4
{
down(s24) ;
z := v * x ;
up(s46) ;
}
process P5
{
down(s15) ;
down(s35) ;
y := w * y ;
up(s57) ;
}
process P6
{
down(s16) ;
down(s46) ;
z := w * z ;
up(s67) ;
}
process P7
{
down(s57) ;
down(s67) ;
ans := y + z ;
}
P1 P2
P3 P4
P5 P6
P7
11/8/2005 Traàn Haïnh Nhi
Caâu 14:
Cho mảng sau: int x[20];
Sử dụng cơ chế đồng bộ hoá là semaphore để viết code cho 3 threads
B,C,D cùng thực hiện đồng thời các thao tác trên mảng x thoả mãn
các yêu cầu sau:
a. B tính tổng giá trị các phần tử mảng x có chỉ số chẵn.
b. C tính tổng giá trị các phần tử mảng x có chỉ số lẽ.
c. D tính tổng giá trị tất cả các phần tử của mảng x, dựa trên kết quả trả
về của B và C.
d. Các threads được khởi động cùng lúc.
e. Các threads kết thúc khi xong công việc của mình, không cần chờ lẫn
nhau.
f. Phải khai thác tối đa khả năng xử lý song song,chia sẽ tài nguyên dùng
chung của các threads.
11/8/2005 Traàn Haïnh Nhi
Caâu 14 – Caùch 1:
Ñaùp aùn : semaphore overB =0, overC =0 ;
Interger sumB, sumC = 0;
Process B()
{
for(i=0;i<9,i++) {
sumB +=x[2*i];
}
up(overB);
}
Process C()
{
for(i=0;i<9,i++){
sumC +=x[2*i+1];
}
up(overC);
}
Process D()
{
down(overB);
down(overC);
sum=sumB+sumC;
}
11/8/2005 Traàn Haïnh Nhi
Caâu 14 – Caùch 2:
Ñaùp aùn : semaphore over=0;
Interger sumB, sumC = 0;
Process B()
{
for(i=0;i<9,i++) {
sumB +=x[2*i];
}
up(over);
}
Process C()
{
for(i=0;i<9,i++){
sumC +=x[2*i+1];
}
up(over);
}
Process D()
{
down(over);
down(over);
sum=sumB+sumC;
}
11/8/2005 Traàn Haïnh Nhi
Caâu 14 – Caùch 3:
Ñaùp aùn : semaphore mutex=1;
Interger sum=0;
Process B()
{
for(i=0;i<9,i++) {
down(mutex);
sum +=x[2*i];
up(mutex);
}
}
Process C()
{
for(i=0;i<9,i++){
down(mutex);
sum +=x[2*i+1];
up(mutex);
}
}
Process D()
{
}
11/8/2005 Traàn Haïnh Nhi
Caâu 14 – Caùch 3:
Ñaùp aùn : semaphore mutex=1, over=0;
Interger sum=0;
Process B()
{
for(i=0;i<9,i++) {
down(mutex);
sum +=x[2*i];
up(mutex);
}
up(over);
}
Process C()
{
for(i=0;i<9,i++){
down(mutex);
sum +=x[2*i+1];
up(mutex);
}
up(over);
}
Process D()
{
down(over);
down(over);
}
11/8/2005 Traàn Haïnh Nhi
Caâu 15:
Một hãng sản xuất xe ôtô có các bộ phận hoạt động song song:
+ Bộ phận sản xuất khung xe:
MakeChassis() { //Sản xuất ra một khung xe
Produce_chassis();
}
+ Bộ phận sản xuất bánh xe:
MakeTire() { //Sản xuất ra một bánh xe
Produce_tire();
}
+ Bộ phận lắp ráp: Sau khi có được 1 khung xe và 4 bánh xe thì tiến hành lắp ráp
4 bánh xe này vào khung xe:
Assemble(){ //Gắn 4 bánh xe vào khung xe
Put_4_tires_to_chassis();
}
Hãy đồng bộ hoạt động của các bộ phận trên thoả các nguyên tắc sau:
Tại mỗi thời điểm chỉ cho phép sản xuất ra 1 khung xe. Cần chờ có đủ 4 bánh xe
để gắn vào khung xe hiện tại này trước khi sản xuất ra một khung xe mới.
11/8/2005 Traàn Haïnh Nhi
Caâu 15: Ñaùp aùn
Semaphore chassis=0, tire=0, wait=1;
Make_Chassis()
{
down(wait);
produce_chas();
up(chassis);
}
Make_Tire()
{
produce_Tire()
up(tire);
}
Assemble()
{
down(tire);
down(chassis);
down(chassis);
down(chassis);
Put_4_tires_to_chassis();
up(wait);
}
11/8/2005 Traàn Haïnh Nhi
Caâu 16:
Trong giai đoạn thử nghiệm, hầm đường bộ qua đèo Hải Vân chỉ cho phép các phương
tiện lưu thông qua hầm với số lượng hạn chế và với những điều kiện nghiêm ngặt. Khi
một phương tiện đến đầu hầm sẽ gọi hàm EnterTunnel(direction) để kiểm tra điều kiện
vào hầm. Khi đã qua hầm sẽ gọi hàm ExitTunnel(direction) để báo hiệu kết thúc và rời
hầm.
Giả sử hoạt động của mỗi một phương tiện được mô tả bằng tiến trình Car() sau đây:
Car(direction) //Direction xác định hướng
di chuyển của phương tiện
{
RuntoTunnel(); //Phương tiện di chuyển về phía hầm
EnterTunnel(direction); //Đi vào hầm theo hướng direction
PassTunnel(); //Qua hầm
ExitTunnel(direction); //Rời khỏi hầm theo hướng
direction.
}
Hãy viết lại các hàm EnterTunnel(direction) và ExitTunnel(direction) kiểm soát giao
thông qua hầm sao cho:
a. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông qua hầm theo hướng
bất kỳ.
b. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông cùng hướng qua hầm.
11/8/2005 Traàn Haïnh Nhi
Caâu 16.a: Ñaùp aùn
Semaphore max=3;
EnterTunnel(direction)
{
down(max);
...
}
ExitTunnel()
{
...
up(max);
}

More Related Content

What's hot

Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng online
Han Nguyen
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
Nhuận Lê Văn
 
Os 3 - synchronization
Os   3 - synchronizationOs   3 - synchronization
Os 3 - synchronizationDat Ngo
 
[Bao cao]tim hieu ve mo hinh lap trinh
[Bao cao]tim hieu ve mo hinh lap trinh[Bao cao]tim hieu ve mo hinh lap trinh
[Bao cao]tim hieu ve mo hinh lap trinh
Thùy Linh
 
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQANgân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
Popping Khiem - Funky Dance Crew PTIT
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
Thùy Linh
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Nguyễn Danh Thanh
 
Giáo trình quản lý dự án
Giáo trình quản lý dự ánGiáo trình quản lý dự án
Giáo trình quản lý dự án
Nguyễn Ngọc Phan Văn
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xeptran0phu
 
hệ quản trị cơ sỡ dữ liệu bán vé xem phim
hệ quản trị cơ sỡ dữ liệu bán vé xem phimhệ quản trị cơ sỡ dữ liệu bán vé xem phim
hệ quản trị cơ sỡ dữ liệu bán vé xem phim
thuhuynhphonegap
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềm
Thuyet Nguyen
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
vennguyennoinho
 
Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022
HongDuyLe1
 
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phêbáo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
thuhuynhphonegap
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#
An Nguyen
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
MasterCode.vn
 
CONG NGHE PHAN MEM
CONG NGHE PHAN MEMCONG NGHE PHAN MEM
CONG NGHE PHAN MEM
duc phong
 
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
Đồ án access 01677525178
 

What's hot (20)

Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng online
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Os 3 - synchronization
Os   3 - synchronizationOs   3 - synchronization
Os 3 - synchronization
 
[Bao cao]tim hieu ve mo hinh lap trinh
[Bao cao]tim hieu ve mo hinh lap trinh[Bao cao]tim hieu ve mo hinh lap trinh
[Bao cao]tim hieu ve mo hinh lap trinh
 
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQANgân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
Ngân hàng đảm bảo chất lượng phần mềm PTIT - Chuẩn SQA
 
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNGPHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
PHÂN TÍCH THIẾT KẾ HỆ THỐNG BÁN HÀNG QUA MẠNG
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 
Mau bao cao project 1
Mau bao cao project 1Mau bao cao project 1
Mau bao cao project 1
 
Giáo trình quản lý dự án
Giáo trình quản lý dự ánGiáo trình quản lý dự án
Giáo trình quản lý dự án
 
Bao cao powerpoint
Bao cao powerpointBao cao powerpoint
Bao cao powerpoint
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xep
 
hệ quản trị cơ sỡ dữ liệu bán vé xem phim
hệ quản trị cơ sỡ dữ liệu bán vé xem phimhệ quản trị cơ sỡ dữ liệu bán vé xem phim
hệ quản trị cơ sỡ dữ liệu bán vé xem phim
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềm
 
Hệ thống quản lý rạp chiếu phim
Hệ thống quản lý          rạp chiếu phimHệ thống quản lý          rạp chiếu phim
Hệ thống quản lý rạp chiếu phim
 
Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022Flutter trong lập trình mobile - HUFLIT 2022
Flutter trong lập trình mobile - HUFLIT 2022
 
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phêbáo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
báo cáo hệ quản trị cơ sỡ dữ liệu hệ thống bán cà phê
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
 
CONG NGHE PHAN MEM
CONG NGHE PHAN MEMCONG NGHE PHAN MEM
CONG NGHE PHAN MEM
 
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
Báo cáo Quản lý Khách Sạn Làm Đồ án Access 01677525178
 

Similar to Baitap dongbo.bdf

Bài 18 tin hoc 11
Bài 18 tin hoc 11Bài 18 tin hoc 11
Bài 18 tin hoc 11HaBaoChau
 
bai giang
 bai giang bai giang
bai giang
Mo Nguyen
 
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Sân Ngoài Còn Lá
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
Trung Thanh Nguyen
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
Mr Giap
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++tuandong_ptit
 
Thuc hanh mat lab tong hop
Thuc hanh mat lab tong hopThuc hanh mat lab tong hop
Thuc hanh mat lab tong hop
Hùng Vương
 
Bài 17 tin học 11
Bài 17 tin học 11Bài 17 tin học 11
Bài 17 tin học 11HaBaoChau
 
Cách giải Toán vector với máy tính bỏ túi
Cách giải Toán vector với máy tính bỏ túiCách giải Toán vector với máy tính bỏ túi
Cách giải Toán vector với máy tính bỏ túi
On thi
 
Bai 18 tiet 1
Bai 18  tiet 1Bai 18  tiet 1
Bai 18 tiet 1
Hiếu Hồ Minh
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Congdat Le
 
He thong bai trac nghiem chuong 3
He thong bai trac nghiem chuong 3He thong bai trac nghiem chuong 3
He thong bai trac nghiem chuong 3
lethilien1993
 
Chuyen de so sanh phan so toan 6 2012
Chuyen de so sanh phan so toan 6  2012Chuyen de so sanh phan so toan 6  2012
Chuyen de so sanh phan so toan 6 2012
Huy BK
 
Lap trinh huong doi tuong voi c++ smith.n studio
Lap trinh huong doi tuong voi c++   smith.n studioLap trinh huong doi tuong voi c++   smith.n studio
Lap trinh huong doi tuong voi c++ smith.n studiona
 
Bai giang bai19
Bai giang bai19Bai giang bai19
Bai giang bai19
Hiếu Hồ Minh
 
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
Tiến Quang Phan
 

Similar to Baitap dongbo.bdf (20)

Bài 18 tin hoc 11
Bài 18 tin hoc 11Bài 18 tin hoc 11
Bài 18 tin hoc 11
 
bai giang
 bai giang bai giang
bai giang
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++
 
Thuc hanh mat lab tong hop
Thuc hanh mat lab tong hopThuc hanh mat lab tong hop
Thuc hanh mat lab tong hop
 
Bài 17 tin học 11
Bài 17 tin học 11Bài 17 tin học 11
Bài 17 tin học 11
 
Cách giải Toán vector với máy tính bỏ túi
Cách giải Toán vector với máy tính bỏ túiCách giải Toán vector với máy tính bỏ túi
Cách giải Toán vector với máy tính bỏ túi
 
Bai 18 tiet 1
Bai 18  tiet 1Bai 18  tiet 1
Bai 18 tiet 1
 
Bai 18
Bai 18Bai 18
Bai 18
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
He thong bai trac nghiem chuong 3
He thong bai trac nghiem chuong 3He thong bai trac nghiem chuong 3
He thong bai trac nghiem chuong 3
 
Chuyen de so sanh phan so toan 6 2012
Chuyen de so sanh phan so toan 6  2012Chuyen de so sanh phan so toan 6  2012
Chuyen de so sanh phan so toan 6 2012
 
Lap trinh huong doi tuong voi c++ smith.n studio
Lap trinh huong doi tuong voi c++   smith.n studioLap trinh huong doi tuong voi c++   smith.n studio
Lap trinh huong doi tuong voi c++ smith.n studio
 
Bai giang bai19
Bai giang bai19Bai giang bai19
Bai giang bai19
 
C8 object-oriented thinking
C8 object-oriented thinkingC8 object-oriented thinking
C8 object-oriented thinking
 

More from Hoa Cỏ May (20)

Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
Exception 3
Exception 3Exception 3
Exception 3
 
Itp th de02
Itp th de02Itp th de02
Itp th de02
 
Ex chapter 7
Ex chapter 7Ex chapter 7
Ex chapter 7
 
Ex chapter 6
Ex chapter 6Ex chapter 6
Ex chapter 6
 
Ex chapter 5
Ex chapter 5Ex chapter 5
Ex chapter 5
 
Ex chapter 4
Ex chapter 4Ex chapter 4
Ex chapter 4
 
Ex chapter 3
Ex chapter 3Ex chapter 3
Ex chapter 3
 
Ex chapter 2
Ex chapter 2Ex chapter 2
Ex chapter 2
 
86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c
 
Bt word 3
Bt word 3Bt word 3
Bt word 3
 
Bt word 2
Bt word 2Bt word 2
Bt word 2
 
Bt word 1
Bt word 1Bt word 1
Bt word 1
 
Bai tapwindows 2
Bai tapwindows 2Bai tapwindows 2
Bai tapwindows 2
 
Bai tap ppt
Bai tap pptBai tap ppt
Bai tap ppt
 
Tai lieu 02_-_phieu_bai_tap_th07_
Tai lieu 02_-_phieu_bai_tap_th07_Tai lieu 02_-_phieu_bai_tap_th07_
Tai lieu 02_-_phieu_bai_tap_th07_
 
Phan phoi ct tin hoc thpt 2011 2012
Phan phoi ct tin hoc thpt 2011 2012Phan phoi ct tin hoc thpt 2011 2012
Phan phoi ct tin hoc thpt 2011 2012
 
Lecture05
Lecture05Lecture05
Lecture05
 
Lecture04
Lecture04Lecture04
Lecture04
 

Baitap dongbo.bdf

  • 1. 11/8/2005 Traàn Haïnh Nhi Baøi oân taäp: Ñoàng boä hoaù tieán trình Caâu 1 : 2 nhu caàu trao ñoåi thoâng tin cuûa tieán trình nhaèm : a. Chia seû taøi nguyeân chung, Phoái hôïp hoaït ñoäng b. Xöû lyù song song , Phoái hôïp hoaït ñoäng c. Baûo ñaûm ñoäc laäp, Thoâng baùo loãi Ñaùp aùn : a
  • 2. 11/8/2005 Traàn Haïnh Nhi Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình Caâu 2 : Race Condition laø a. Keát quaû thöïc hieän tieán trình phuï thuoäc vaøo keát quaû ñieàu phoái b. Hieän töôïng caùc tieán trình chia seû taøi nguyeân chung c. Keát quaû tieán trình thöïc hieän luoân luoân sai Ñaùp aùn : a
  • 3. 11/8/2005 Traàn Haïnh Nhi Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình Caâu 3 : Critical section laø a. Taøi nguyeân duøng chung giöõa caùc tieán trình b. Cô cheá baûo veä taøi nguyeân duøng chung c. Ñoaïn chöông trình coù khaû naêng gaây ra hieän töôïng race condition d. Ñoaïn chöông trình coù truy caäp taøi nguyeân duøng chung Ñaùp aùn : c
  • 4. 11/8/2005 Traàn Haïnh Nhi Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình Caâu 4 : 2 nhu caàu ñoàng boä tieán trình laø : a. Hoø heïn , Phoái hôïp hoaït ñoäng b. Trao ñoåi thoâng tin, Phoái hôïp hoaït ñoäng c. Ñoäc quyeàn truy xuaát , Giaûi quyeát tranh chaáp d. Khoâng coù caâu naøo ñuùng Ñaùp aùn : d
  • 5. 11/8/2005 Traàn Haïnh Nhi Caâu 5 : Cho bieát caùc ñieàu kieän cho moät giaûi phaùp ñoàng boä toát Ñaùp aùn : Mutual Exclusion : Khoâng coù hai tieán trình cuøng ôû trong mieàn gaêng cuøng luùc Progess : Moät tieán trình taïm döøng beân ngoaøi mieàn gaêng khoâng ñöôïc ngaên caûn caùc tieán trình khaùc vaøo mieàn gaêng Bounded Waiting : Khoâng coù tieán trình naøo phaûi chôø voâ haïn ñeå ñöôïc vaøo mieàn gaêng. Khoâng coù giaû thieát naøo ñaët ra cho söï lieân heä veà toác ñoä cuûa caùc tieán trình, cuõng nhö veà soá löôïng boä xöû lyù trong heä thoáng Baøi oân taäp 3 : Ñoàng boä hoaù tieán trình
  • 6. Caâu 6 : Xeùt giaûi phaùp phaàn meàm do Dekker ñeà nghò ñeå toå chöùc truy xaát ñoäc quyeàn cho hai tieán trình . Hai tieán trình P0, P1 chia seû caùc bieán sau : var flag : array [0..1] of boolean; (khôûi ñoäng laø false) turn : 0..1; Caáu truùc moät tieán trình Pi ( i =0 hay 1, vaø j laø tieán trình coøn laïi ) nhö sau : repeat flag[i] := true; while flag[j] do if turn = j then begin flag[i]:= false; while turn = j do ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false; Giaûi phaùp naøy coù phaûi laø moät giaûi phaùp ñuùng thoûa maõn 4 yeâu caàu khoâng ?
  • 7. 11/8/2005 Traàn Haïnh Nhi Caâu 6: Ñaùp aùn Ñuùng. Giaûi phaùp naøy baûo ñaûm yeâu caàu ñoäc quyeàn truy xuaát vì khi caû 2 tieán trình Pi vaø Pj ñoàng thôøi quan taâm ñeán vieäc vaøo mieàn gaêng (flag[i]=true vaø flag[j]=true) thì chæ coù moät tieán trình ñöôïc vaøo mieàn gaêng tuøy theo giaù trò cuûa turn. Neáu tieán trình Pi ñang xöû lyù Non_criticalsection, thì tröôùc ñoù flag[i] ñaõ ñöôïc gaùn giaù trò false, do vaäy khoâng ngaên caûn Pj quay laïi criticalsection
  • 8. Caâu 7 : Xeùt giaûi phaùp ñoàng boä hoaù sau : while (TRUE) { int j = 1-i; flag[i]= TRUE; turn = i; while (turn == j && flag[j]==TRUE); critical-section (); flag[i] = FALSE; Noncritical-section (); } Ñaây coù phaûi laø moät giaûi phaùp baûo ñaûm ñöôïc ñoäc quyeàn truy xuaát khoâng ? Ñaùp aùn : Khoâng. Xeùt tình huoáng khi flag[0] =1; turn =0=> P0 vaøo CS, neáu luùc ñoù flag[1]= 1, P1 coù theå gaùn turn = 1 vaø vaøo luoân CS !
  • 9. Caâu 8 : Giaû söû moät maùy tính khoâng coù chæ thò TSL, nhöng coù chæ thò Swap coù khaû naêng hoaùn ñoåi noäi dung cuûa hai töø nhôù chæ baèng moät thao taùc khoâng theå phaân chia : procedure Swap() var a,b: boolean); var temp : boolean; begin temp := a; a:= b; b:= temp; end; Söû duïng chæ thò naøy coù theå toå chöùc truy xuaát ñoäc quyeàn khoâng ? Neáu coù, xaây döïng caáu chöông trình töông öùng.
  • 10. 11/8/2005 Traàn Haïnh Nhi Caâu 8: Ñaùp aùn while (TRUE) { key = TRUE; while ( key = TRUE) Swap(lock,key); critical-section (); lock = false; Noncritical-section(); }
  • 11. Caâu 9 : Xeùt hai tieán trình sau : process A { while (TRUE) na = na +1; } process B { while (TRUE) nb = nb +1; } a. Ñoàng boä hoaù xöû lyù cuûa hai tieán trình treân, söû duïng hai semaphore toång quaùt, sao cho taïi baát kyø thôøi ñieåm naøo cuõng coù nb < na <= nb +10 b. Neáu giaûm ñieàu kieän chæ laø na <= nb +10, giaûi phaùp cuûa baïn seõ ñöôïc söûa chöõa nhö theá naøo ? c. Giaûi phaùp cuûa baïn coù coøn ñuùng neáu coù nhieàu tieán trình loaïi A vaø B cuøng thöïc hieän?
  • 12. 11/8/2005 Traàn Haïnh Nhi Caâu 9: Ñaùp aùn Ñaùp aùn : semaphore a = ; b = ; Process A() { int item; while (TRUE) { down(b); na = na + 1; up(a); } } Process B() { int item; while (TRUE) { down(a); nb = nb + 1; up(b); } } 0 10
  • 13. Caâu 10 : Moät bieán X ñöôïc chia seû bôûi hai tieán trình cuøng thöïc hieän ñoaïn code sau : do X = X +1; if ( X == 20) X = 0; while ( TRUE ); Baét ñaàu vôùi giaù trò X = 0, chöùng toû raèng giaù trò X coù theå vöôït quaù 20. Caàn söûa chöõa ñoaïn chöông trình treân nhö theá naøo ñeå baûo ñaûm X khoâng vöôït quaù 20 ?
  • 14. 11/8/2005 Traàn Haïnh Nhi Caâu 10: Ñaùp aùn Ñaùp aùn : Semaphore mutex = 1; do { down(mutex); X = X +1; if ( X == 20) X = 0; up(mutex); }while ( TRUE );
  • 15. Caâu 11 : Xeùt hai tieán trình xöû lyù ñoaïn chöông trình sau : process P1 { A1 ; A2 } process P2 { B1 ; B2 } Ñoàng boä hoaù hoaït ñoäng cuûa hai tieán trình naøy sao cho caû A1 vaø B1 ñeàu hoaøn taát tröôùc khi A2 hay B2 baét ñaàu .
  • 16. 11/8/2005 Traàn Haïnh Nhi Caâu 11: Ñaùp aùn Ñaùp aùn : semaphore ab = ; ba = ;0 0 Process A() { A1; up(ba); down(ab); A2; } Process B() { B1; up(ab); down(ba); B2; }
  • 17. Caâu 12 : Toång quaùt hoaù caâu hoûi 8) cho caùc tieán trình xöû lyù ñoaïn chöông trình sau : process P1 { for ( i = 1; i <= 100; i ++) Ai } process P2 { for ( j = 1; j <= 100; j ++) Bj } Ñoàng boä hoaù hoaït ñoäng cuûa hai tieán trình naøy sao cho caû vôùi k baát kyø ( 2 ≤ k ≤ 100), Ak chæ coù theå baét ñaàu khi B(k-1) ñaõ keát thuùc, vaø Bk chæ coù theå baét ñaàu khi A(k-1) ñaõ keát thuùc.
  • 18. 11/8/2005 Traàn Haïnh Nhi Caâu 12: Ñaùp aùn Ñaùp aùn : semaphore ab = ; ba = ; Process A() { for ( i = 1; i<=100; i++) { down(ab); Ai; up(ba); } } Process B() { for ( i = 1; i<=100; i++) { down(ba); Bi; up(ab); } 1 1
  • 19. Caâu 13 : Söû duïng semaphore ñeå vieát laïi chöông trình sau theo moâ hình xöû lyù ñoàng haønh: w := x1 * x2 v := x3 * x4 y := v * x5 z := v * x6 y := w * y z := w * z ans := y + z
  • 20. 11/8/2005 Traàn Haïnh Nhi Ñaùp aùn : process P1 { w := x1 * x2 ; up(s15) ; up(s16) ; } process P2 { v := x3 * x4 ; up(s23) ; up(s24) ; } process P3 { down(s23) ; y := v * x5 ; up(s35) ; } process P4 { down(s24) ; z := v * x ; up(s46) ; } process P5 { down(s15) ; down(s35) ; y := w * y ; up(s57) ; } process P6 { down(s16) ; down(s46) ; z := w * z ; up(s67) ; } process P7 { down(s57) ; down(s67) ; ans := y + z ; } P1 P2 P3 P4 P5 P6 P7
  • 21. 11/8/2005 Traàn Haïnh Nhi Caâu 14: Cho mảng sau: int x[20]; Sử dụng cơ chế đồng bộ hoá là semaphore để viết code cho 3 threads B,C,D cùng thực hiện đồng thời các thao tác trên mảng x thoả mãn các yêu cầu sau: a. B tính tổng giá trị các phần tử mảng x có chỉ số chẵn. b. C tính tổng giá trị các phần tử mảng x có chỉ số lẽ. c. D tính tổng giá trị tất cả các phần tử của mảng x, dựa trên kết quả trả về của B và C. d. Các threads được khởi động cùng lúc. e. Các threads kết thúc khi xong công việc của mình, không cần chờ lẫn nhau. f. Phải khai thác tối đa khả năng xử lý song song,chia sẽ tài nguyên dùng chung của các threads.
  • 22. 11/8/2005 Traàn Haïnh Nhi Caâu 14 – Caùch 1: Ñaùp aùn : semaphore overB =0, overC =0 ; Interger sumB, sumC = 0; Process B() { for(i=0;i<9,i++) { sumB +=x[2*i]; } up(overB); } Process C() { for(i=0;i<9,i++){ sumC +=x[2*i+1]; } up(overC); } Process D() { down(overB); down(overC); sum=sumB+sumC; }
  • 23. 11/8/2005 Traàn Haïnh Nhi Caâu 14 – Caùch 2: Ñaùp aùn : semaphore over=0; Interger sumB, sumC = 0; Process B() { for(i=0;i<9,i++) { sumB +=x[2*i]; } up(over); } Process C() { for(i=0;i<9,i++){ sumC +=x[2*i+1]; } up(over); } Process D() { down(over); down(over); sum=sumB+sumC; }
  • 24. 11/8/2005 Traàn Haïnh Nhi Caâu 14 – Caùch 3: Ñaùp aùn : semaphore mutex=1; Interger sum=0; Process B() { for(i=0;i<9,i++) { down(mutex); sum +=x[2*i]; up(mutex); } } Process C() { for(i=0;i<9,i++){ down(mutex); sum +=x[2*i+1]; up(mutex); } } Process D() { }
  • 25. 11/8/2005 Traàn Haïnh Nhi Caâu 14 – Caùch 3: Ñaùp aùn : semaphore mutex=1, over=0; Interger sum=0; Process B() { for(i=0;i<9,i++) { down(mutex); sum +=x[2*i]; up(mutex); } up(over); } Process C() { for(i=0;i<9,i++){ down(mutex); sum +=x[2*i+1]; up(mutex); } up(over); } Process D() { down(over); down(over); }
  • 26. 11/8/2005 Traàn Haïnh Nhi Caâu 15: Một hãng sản xuất xe ôtô có các bộ phận hoạt động song song: + Bộ phận sản xuất khung xe: MakeChassis() { //Sản xuất ra một khung xe Produce_chassis(); } + Bộ phận sản xuất bánh xe: MakeTire() { //Sản xuất ra một bánh xe Produce_tire(); } + Bộ phận lắp ráp: Sau khi có được 1 khung xe và 4 bánh xe thì tiến hành lắp ráp 4 bánh xe này vào khung xe: Assemble(){ //Gắn 4 bánh xe vào khung xe Put_4_tires_to_chassis(); } Hãy đồng bộ hoạt động của các bộ phận trên thoả các nguyên tắc sau: Tại mỗi thời điểm chỉ cho phép sản xuất ra 1 khung xe. Cần chờ có đủ 4 bánh xe để gắn vào khung xe hiện tại này trước khi sản xuất ra một khung xe mới.
  • 27. 11/8/2005 Traàn Haïnh Nhi Caâu 15: Ñaùp aùn Semaphore chassis=0, tire=0, wait=1; Make_Chassis() { down(wait); produce_chas(); up(chassis); } Make_Tire() { produce_Tire() up(tire); } Assemble() { down(tire); down(chassis); down(chassis); down(chassis); Put_4_tires_to_chassis(); up(wait); }
  • 28. 11/8/2005 Traàn Haïnh Nhi Caâu 16: Trong giai đoạn thử nghiệm, hầm đường bộ qua đèo Hải Vân chỉ cho phép các phương tiện lưu thông qua hầm với số lượng hạn chế và với những điều kiện nghiêm ngặt. Khi một phương tiện đến đầu hầm sẽ gọi hàm EnterTunnel(direction) để kiểm tra điều kiện vào hầm. Khi đã qua hầm sẽ gọi hàm ExitTunnel(direction) để báo hiệu kết thúc và rời hầm. Giả sử hoạt động của mỗi một phương tiện được mô tả bằng tiến trình Car() sau đây: Car(direction) //Direction xác định hướng di chuyển của phương tiện { RuntoTunnel(); //Phương tiện di chuyển về phía hầm EnterTunnel(direction); //Đi vào hầm theo hướng direction PassTunnel(); //Qua hầm ExitTunnel(direction); //Rời khỏi hầm theo hướng direction. } Hãy viết lại các hàm EnterTunnel(direction) và ExitTunnel(direction) kiểm soát giao thông qua hầm sao cho: a. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông qua hầm theo hướng bất kỳ. b. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông cùng hướng qua hầm.
  • 29. 11/8/2005 Traàn Haïnh Nhi Caâu 16.a: Ñaùp aùn Semaphore max=3; EnterTunnel(direction) { down(max); ... } ExitTunnel() { ... up(max); }