e) Chi nl ế ược đi u phi vi nhi um c đu tiên ư
2.4.2. Bài toán đ ng b hoá ộ
a). V n đ tranh đo t đi u khi n (race condition)ấ ề ạ ề ể
Gi s có hai ti n trình Pả ử ế 1 và P2 th c hi n công vi c c a các k toán, và cùngự ệ ệ ủ ế chia s m t vùng nh chung l u tr bi n ẻ ộ ớ ư ữ ế taikhoan ph n ánh thông tin v tài kho n.ả ề ả M i ti n trình mu n rút m t kho n ti n ỗ ế ố ộ ả ề tienrut t tài kho n:ừ ả
if (taikhoan - tienrut >=0) taikhoan = taikhoan - tienrut; else
error(« khong the rut tien ! »);
Gi s trong tài kho n hi n còn 800, Pả ử ả ệ 1 mu n rút 500 và Pố 2 mu n rút 400. N uố ế x y ra tình hu ng nh sau : ả ố ư
Sau khi đã ki m tra đi u ki n (taikhoan - tienrut >=0) và nh n k t qu là 300,ể ề ệ ậ ế ả P1 h t th i gian x lý mà h th ng cho phép, h đi u hành c p phát CPU cho Pế ờ ử ệ ố ệ ề ấ 2.
P2 ki m tra cùng đi u ki n trên, nh n để ề ệ ậ ược k t qu là 400 (do Pế ả 1 v n ch a rútẫ ư ti n) và rút 400. Giá tr c a ề ị ủ taikhoan đượ ậc c p nh t l i là 400. ậ ạ
Khi P1 được tái kích ho t và ti p t c x lý, nó s không ki m tra l i đi u ki nạ ế ụ ử ẽ ể ạ ề ệ (taikhoan - tienrut >=0)-vì đã ki m tra trong lể ượ ửt x lý trước- mà th c hi n rút ti n.ự ệ ề Giá tr c a ị ủ taikhoan s l i đẽ ạ ượ ậc c p nh t thành -100. Tình hu ng l i x y ra ! ậ ố ỗ ả
Các tình hu ng tố ương t nh th - có th x y ra khi có nhi u h n hai ti nự ư ế ể ả ề ơ ế trình đ c và ghi d li u trên cùng m t vùng nh chung, và k t qu ph thu c vào sọ ữ ệ ộ ớ ế ả ụ ộ ự đi u ph i ti n trình c a h th ng- đề ố ế ủ ệ ố ược g i là các tình hu ng tranh đo t đi u khi nọ ố ạ ề ể
(race condition) .
Đ ngăn ch n các tình hu ng l i có th n y sinh khi các ti n trình truy xu tể ặ ố ỗ ể ả ế ấ đ ng th i m t tài nguyên không th chia s , c n ph i áp đ t m t s truy xu t đ cồ ờ ộ ể ẻ ầ ả ặ ộ ự ấ ộ quy n trên tài nguyên đó : khi m t ti n trình đang s d ng tài nguyên, thì nh ng ti nề ộ ế ử ụ ữ ế trình khác không được truy xu t đ n tài nguyên. ấ ế
Đo n chạ ương trình trong đó có kh năng x y ra các mâu thu n truy xu t trênả ả ẫ ấ tài nguyên chung được g i là ọ mi n găng (critical section)ề . Trong ví d trên, đo n mã : ụ ạ
if (taikhoan - tienrut >=0) taikhoan = taikhoan - tienrut;
c a m i ti n trình t o thành m t mi n găng.ủ ỗ ế ạ ộ ề
Có th gi i quy t v n đ mâu thu n truy xu t n u có th b o đ m t i m tể ả ế ấ ề ẫ ấ ế ể ả ả ạ ộ th i đi m ch có duy nh t m t ti n trình đờ ể ỉ ấ ộ ế ược x lý l nh trong mi n găng.ử ệ ề
M t phộ ương pháp gi i quy t t t bài toán mi n găng c n thõa mãn 4 đi u ki nả ế ố ề ầ ề ệ sau:
-Không có hai ti n trình cùng trong mi n găng cùng lúc. ế ở ề
-Không có gi thi t nào đ t ra cho s liên h v t c đ c a các ti n trình,ả ế ặ ự ệ ề ố ộ ủ ế cũng nh v s lư ề ố ượng b x lý trong h th ng. ộ ử ệ ố
-M t ti n trình t m d ng bên ngoài mi n găng không độ ế ạ ừ ề ược ngăn c n các ti nả ế trình khác vào mi n găng.ề
-Không có ti n trình nào ph i ch vô h n đ đế ả ờ ạ ể ược vào mi n găng.ề