Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

5 posters

Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  kimgiap(i92c) 9/11/2010, 09:40

Giả sử P1 có mã S1, P2 có mã S2, P3 có mã S3 cần tổ chức như yêu cầu
Ta dùng đèn hiệu như sau:
Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Hdh1


Các bạn tham gia phát triển góp ý bài tập này của Thày cho ha.
kimgiap(i92c)
kimgiap(i92c)

Tổng số bài gửi : 144
Join date : 28/07/2010
Đến từ : Bình Định

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  quocviet_i92c 9/11/2010, 09:49

kimgiap(i92c) đã viết:Giả sử P1 có mã S1, P2 có mã S2, P3 có mã S3 cần tổ chức như yêu cầu
Ta dùng đèn hiệu như sau:
Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Hdh1


Các bạn tham gia phát triển góp ý bài tập này của Thày cho ha.
Khi Cấu trúc 3 thực hiện xong thì sẻ thế nào, liệu có khả thi không?Sao mình không có 1 lời gọi Cấu trúc 1 lại để thực thi.

quocviet_i92c

Tổng số bài gửi : 40
Join date : 09/11/2010

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  kimgiap(i92c) 9/11/2010, 09:57

Tại vỉ P1 đang chạy thì P2 và P3 bị lock xong P1 rồi mới đến P2 thực thi, P3 vẫn còn lock đến khi P2 xong thì mới tới P3 thực thi.
kimgiap(i92c)
kimgiap(i92c)

Tổng số bài gửi : 144
Join date : 28/07/2010
Đến từ : Bình Định

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  KimThao_I83C_08H1012087 9/11/2010, 23:51

Lop truong oi cho minh hoi danh sach so thu tu mon nay ban post o dau vay? sao minh kiem ko duoc. ban giup cho minh cai link nha. Cam on nhiu nhiu.

KimThao_I83C_08H1012087

Tổng số bài gửi : 49
Join date : 14/09/2009
Age : 39
Đến từ : TP.Hồ Chí Minh

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  VuThanhLongI92 9/11/2010, 23:59

KimThao_I83C_08H1012087 đã viết:Lop truong oi cho minh hoi danh sach so thu tu mon nay ban post o dau vay? sao minh kiem ko duoc. ban giup cho minh cai link nha. Cam on nhiu nhiu.

https://hedieuhanh.forumvi.com/forum-f6/topic-t2449.htm

VuThanhLongI92

Tổng số bài gửi : 64
Join date : 14/09/2010
Age : 40
Đến từ : HCMC

http://www.msao.vn

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  VoTrungThanh(I92C) 10/11/2010, 00:29

Chương trình của bạn Giáp Đúng nhưng giải thích không đúng.
Thực ra, Khi tiến trình P3 thực hiện trước, thì P3 sẽ bị quẩn tại hàm wait(synch2) cụ thể là quẩn tại hàm kiểm tra điều kiện while(S<=0); với S là giá trị synch2 truyền vào --- hàm này sẽ liên tục kiểm tra giá trị synch2 đã lớn hơn 0 hay chưa (đèn hiệu 2 đã bật xanh chưa).
--> hàm S3 sẽ không được thực hiện cho đến khi tiến trình P2 chạy hoàn tất.
Giải thích tương tự : Khi P2 thực hiện trước , thì P2 cũng sẽ bị quẩn tại hàm wait(synch1) --- hàm này sẽ liên tục kiểm tra giá trị synch1 đã lớn hơn 0 hay chưa (đèn hiệu 1 đã bật xanh chưa).
--> hàm S2 sẽ không được thực hiện cho đến khi tiến trình P1 chạy hoàn tất.
Thứ tự đúng :
Tiến trình P1 chạy, S1 được thực hiện, tiếp theo lệnh signal(synch1) thực hiện, tăng synch1 lên 1 (đèn hiệu 1 chuyển xanh) --> tiến trình P1 chạy hoàn tất.
Lúc này hàm wait(synch2) trong cấu trúc P2 kiểm tra thấy synch1 > 0 (đèn hiệu 1 đã bật xanh) -- điều kiện while(S<=0); với S là giá trị synch1 truyền vào không còn đúng nữa nên hàm sẽ không còn bị quẩn, tiếp theo giá trị synch1 sẽ bị giảm xuống 1 --> kết thúc khối lệnh wait(synch1); kế tiếp S2 được thực hiện, sau khi S2 thực hiện xong, lệnh signal(synch2) thực hiện, tăng synch2 lên 1 (đèn hiệu 2 chuyển xanh) --> tiến trình P2 chạy hoàn tất.
Tiến trình P2 vừa chạy xong, hàm wait(synch2) trong cấu trúc P2 kiểm tra thấy synch2 > 0 (đèn hiệu 2 đã bật xanh) báo hiệu S3 được thực hiện.

Đảm bảo đúng nguyên tắc : P1 thực thi xong tới P2, P2 thực thi xong mới tới P3.

Admin
Bạn Võ Trung Thành lý luận tốt và đúng nhưng hơi bị lệ thuộc vào vòng lặp chờ bận (Busy-Waiting) trong wait() (tư duy kiểu "Vòng lặp"). Thực ra, bạn Kim Giáp dùng từ "Locked" (bị khóa) là đúng đấy, tức là khi đèn đỏ, tiến trình gặp nó phải chuyển sang trang thái Waiting (bị khóa và chờ) cho đến khi đèn xanh (giá trị >= 1).


Được sửa bởi VoTrungThanh(I92C) ngày 10/11/2010, 01:26; sửa lần 1.

VoTrungThanh(I92C)

Tổng số bài gửi : 13
Join date : 15/09/2010

Về Đầu Trang Go down

Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào Empty Re: Lập trình đồng bộ hóa công việc 3 tiến trình P1, P2, P3 sao cho P1 trước, tới P2 vào rồi mới tới P3 vào

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết