Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3 thầy cho
3 posters
Trang 1 trong tổng số 1 trang
Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3 thầy cho
Em tổng hợp lại 3 bài đồng bộ hóa tiến trình thầy cho hôm trước, em có dựa trên một số bài giải của các bạn mà thầy đã góp ý và chỉnh sửa, để làm lại cho tốt hơn và cũng chuẩn bị cho kỳ thi sắp tới. Nếu có chỗ nào sai sót, mong thầy góp ý cho em. Cám ơn thầy.
Giai thuật đèn hiệu Semaphore
typedef int semaphore;
wait (semaphore S)
{ while ( S <= 0 );
S --;}
// Hàm signal được viết lại như sau:
signal (semaphore S)
{ S =S++;}
Bài 1: đồng bộ P1 tới trước báo hiệu P2 và P3 cùng chạy sau P1.
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S2 và S3 thi hành sau S1
Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
signal (semaphore S,int i)
{ S =S+i;}
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch=0
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch,2) lúc này synch được tăng lên 2.
Khi synch=2, tiến trình P2 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=1). Đồng thời, hàm wait(synch) của tiến trình P3 có thể được thực hiện trước khi S2 được thực hiện, hàm wait này sẽ giảm giá trị synch xuống một đơn vị (synch = 0), rồi lần lượt S2 , S3 được thi hành.
--> Luôn đảm bảo quy tắc S1 đi trước S2 và S3.
Bài 2: đồng bộ P1 và P2 tới trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=0,
Khi tiến trình P3 được gọi, thì P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Khi tiến trình P1 và P2 được thực hiện, lệnh S1 và S2 được thi hành xong, rồi đến lệnh signal (synch) lúc này tăng synch lên 1 (synch=1).
Khi synch=1, tiến trình P3 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=0), và thi hành lệnh S3
--> Luôn đảm bảo quy tắc S1 và S2 trước S3.
Bài 3: đồng bộ P1 trước P2 và P2 trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 2 đèn hiệu: Semaphore synch1=0, synch2=0.
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch1=0,
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch1) do synch1=0 cho đến khi synch1>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch2) do synch2=0 cho đến khi synch2>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch1) lúc này synch1 được tăng lên 1 (synch1=1).
Khi synch1=1, tiến trình P2 mở khóa tại hàm wait(synch1) và hàm wait(synch1) sẽ giảm giá trị synch1 xuống 1 đơn vị (synch1=0), tiếp tục S2 được thực hiện, sau khi S2 thực hiện xong, lệnh signal(synch2) sẽ tăng lên 1 (synch2=1).
Khi synch2=1, tiến trình P2 chạy hoàn tất, P3 sẽ được mở khóa tại hàm wait(synch2) và thực thi lệnh S3
--> Luôn đảm bảo quy tắc S1 trước S2 và S2 trước S3.
Admin
- Bài 2 giải sai. Làm thế thì P1 hoặc P2 xong là P3 chạy luôn, mà cần P3 chạy sau cả P1 lẫn P2. Xem kỹ lại lời giải mà em đã tham khảo (bạn đó làm đúng).
- Bài 1 và Bài 3 giải đúng.
Giai thuật đèn hiệu Semaphore
typedef int semaphore;
wait (semaphore S)
{ while ( S <= 0 );
S --;}
// Hàm signal được viết lại như sau:
signal (semaphore S)
{ S =S++;}
Bài 1: đồng bộ P1 tới trước báo hiệu P2 và P3 cùng chạy sau P1.
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S2 và S3 thi hành sau S1
Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
signal (semaphore S,int i)
{ S =S+i;}
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch=0
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch,2) lúc này synch được tăng lên 2.
Khi synch=2, tiến trình P2 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=1). Đồng thời, hàm wait(synch) của tiến trình P3 có thể được thực hiện trước khi S2 được thực hiện, hàm wait này sẽ giảm giá trị synch xuống một đơn vị (synch = 0), rồi lần lượt S2 , S3 được thi hành.
--> Luôn đảm bảo quy tắc S1 đi trước S2 và S3.
Bài 2: đồng bộ P1 và P2 tới trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=0,
Khi tiến trình P3 được gọi, thì P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Khi tiến trình P1 và P2 được thực hiện, lệnh S1 và S2 được thi hành xong, rồi đến lệnh signal (synch) lúc này tăng synch lên 1 (synch=1).
Khi synch=1, tiến trình P3 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=0), và thi hành lệnh S3
--> Luôn đảm bảo quy tắc S1 và S2 trước S3.
Bài 3: đồng bộ P1 trước P2 và P2 trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 2 đèn hiệu: Semaphore synch1=0, synch2=0.
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch1=0,
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch1) do synch1=0 cho đến khi synch1>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch2) do synch2=0 cho đến khi synch2>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch1) lúc này synch1 được tăng lên 1 (synch1=1).
Khi synch1=1, tiến trình P2 mở khóa tại hàm wait(synch1) và hàm wait(synch1) sẽ giảm giá trị synch1 xuống 1 đơn vị (synch1=0), tiếp tục S2 được thực hiện, sau khi S2 thực hiện xong, lệnh signal(synch2) sẽ tăng lên 1 (synch2=1).
Khi synch2=1, tiến trình P2 chạy hoàn tất, P3 sẽ được mở khóa tại hàm wait(synch2) và thực thi lệnh S3
--> Luôn đảm bảo quy tắc S1 trước S2 và S2 trước S3.
Admin
- Bài 2 giải sai. Làm thế thì P1 hoặc P2 xong là P3 chạy luôn, mà cần P3 chạy sau cả P1 lẫn P2. Xem kỹ lại lời giải mà em đã tham khảo (bạn đó làm đúng).
- Bài 1 và Bài 3 giải đúng.
nguyenphuongdung(I92C)- Tổng số bài gửi : 11
Join date : 14/09/2010
Re: Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3 thầy cho
Cam on thay da gop y, cau 2 se sua lai nhu the nay, thay synch=-1, khi P1 làm xong trước, thi synch=0, và P2 làm xong thì synch=1. Lúc này P3 mới được vào làm, sẽ đảm bảo S1 và S2 luôn trước S3
Admin
Đúng rồi. Đưa lại Lời giải đầy đủ lên !
Admin
Đúng rồi. Đưa lại Lời giải đầy đủ lên !
nguyenphuongdung(I92C)- Tổng số bài gửi : 11
Join date : 14/09/2010
Re: Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3 thầy cho
cám ơn bạn, đang rất cần những bài tập cụ thể như thế này.
letruong4688- Tổng số bài gửi : 21
Join date : 08/11/2010
Re: Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3 thầy cho
thanks bạn nhá,mình đang truy lùng những bài giải thích code,có bài nào thì post lên nữa nha bạn.thanks
nptu- Tổng số bài gửi : 20
Join date : 10/10/2010
Em chỉnh sửa lại cho đầy đủ và đã fix lỗi của thầy đưa ra
Em tổng hợp lại 3 bài đồng bộ hóa tiến trình thầy cho hôm trước, em có dựa trên một số bài giải của các bạn mà thầy đã góp ý và chỉnh sửa, để làm lại cho tốt hơn và cũng chuẩn bị cho kỳ thi sắp tới. Nếu có chỗ nào sai sót, mong thầy góp ý cho em. Cám ơn thầy.
Giai thuật đèn hiệu Semaphore
typedef int semaphore;
wait (semaphore S)
{ while ( S <= 0 );
S --;}
// Hàm signal được viết lại như sau:
signal (semaphore S)
{ S =S++;}
Bài 1: đồng bộ P1 tới trước báo hiệu P2 và P3 cùng chạy sau P1.
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S2 và S3 thi hành sau S1
Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
signal (semaphore S,int i)
{ S =S+i;}
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch=0
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch,2) lúc này synch được tăng lên 2.
Khi synch=2, tiến trình P2 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=1). Đồng thời, hàm wait(synch) của tiến trình P3 có thể được thực hiện trước khi S2 được thực hiện, hàm wait này sẽ giảm giá trị synch xuống một đơn vị (synch = 0), rồi lần lượt S2 , S3 được thi hành.
--> Luôn đảm bảo quy tắc S1 đi trước S2 và S3.
Bài 2: đồng bộ P1 và P2 tới trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 1 đèn hiệu duy nhất Semaphore synch=-1
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=-1,
Khi tiến trình P3 được gọi, thì P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Giả sử tiến trình P1 thực hiện lệnh S1 xong trước, rồi đến lệnh signal(synch) lúc này tăng synch lên 1 (synch=0). Sau đó, tiến trình P2 cũng thực hiện xong lệnh S2, rồi đến lệnh signal(synch), lúc này tăng synch lên 1(synch=1)
Khi synch=1, tiến trình P3 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=0), và thi hành lệnh S3
--> Luôn đảm bảo quy tắc S1 và S2 trước S3.
Bài 3: đồng bộ P1 trước P2 và P2 trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 2 đèn hiệu: Semaphore synch1=0, synch2=0.
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch1=0,
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch1) do synch1=0 cho đến khi synch1>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch2) do synch2=0 cho đến khi synch2>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch1) lúc này synch1 được tăng lên 1 (synch1=1).
Khi synch1=1, tiến trình P2 mở khóa tại hàm wait(synch1) và hàm wait(synch1) sẽ giảm giá trị synch1 xuống 1 đơn vị (synch1=0), tiếp tục S2 được thực hiện, sau khi S2 thực hiện xong, lệnh signal(synch2) sẽ tăng lên 1 (synch2=1).
Khi synch2=1, tiến trình P2 chạy hoàn tất, P3 sẽ được mở khóa tại hàm wait(synch2) và thực thi lệnh S3
--> Luôn đảm bảo quy tắc S1 trước S2 và S2 trước S3.
Giai thuật đèn hiệu Semaphore
typedef int semaphore;
wait (semaphore S)
{ while ( S <= 0 );
S --;}
// Hàm signal được viết lại như sau:
signal (semaphore S)
{ S =S++;}
Bài 1: đồng bộ P1 tới trước báo hiệu P2 và P3 cùng chạy sau P1.
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S2 và S3 thi hành sau S1
Sử dụng 1 đèn hiệu duy nhất Semaphore synch=0
signal (semaphore S,int i)
{ S =S+i;}
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch=0
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch,2) lúc này synch được tăng lên 2.
Khi synch=2, tiến trình P2 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=1). Đồng thời, hàm wait(synch) của tiến trình P3 có thể được thực hiện trước khi S2 được thực hiện, hàm wait này sẽ giảm giá trị synch xuống một đơn vị (synch = 0), rồi lần lượt S2 , S3 được thi hành.
--> Luôn đảm bảo quy tắc S1 đi trước S2 và S3.
Bài 2: đồng bộ P1 và P2 tới trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 1 đèn hiệu duy nhất Semaphore synch=-1
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=-1,
Khi tiến trình P3 được gọi, thì P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
Giả sử tiến trình P1 thực hiện lệnh S1 xong trước, rồi đến lệnh signal(synch) lúc này tăng synch lên 1 (synch=0). Sau đó, tiến trình P2 cũng thực hiện xong lệnh S2, rồi đến lệnh signal(synch), lúc này tăng synch lên 1(synch=1)
Khi synch=1, tiến trình P3 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=0), và thi hành lệnh S3
--> Luôn đảm bảo quy tắc S1 và S2 trước S3.
Bài 3: đồng bộ P1 trước P2 và P2 trước P3
Ta có: P1 có mã S1, P2 có mã S2, P3 có mã S3. Cần tổ chức để S1 và S2 thi hành trước S3. Sử dụng 2 đèn hiệu: Semaphore synch1=0, synch2=0.
Tại thời điểm ban đầu: P1 đang thực hiện lệnh S1, lúc này synch1=0,
Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch1) do synch1=0 cho đến khi synch1>0.
Tương tự, khi tiến trình P3 được thực hiện, thì cũng như P2, P3 sẽ bị khóa tại hàm wait(synch2) do synch2=0 cho đến khi synch2>0. Do đó, S2 và S3 chỉ được thực hiện khi S1 thực hiện xong.
Khi tiến trình P1 được thực hiện, lệnh S1 được thi hành xong, rồi đến lệnh signal (synch1) lúc này synch1 được tăng lên 1 (synch1=1).
Khi synch1=1, tiến trình P2 mở khóa tại hàm wait(synch1) và hàm wait(synch1) sẽ giảm giá trị synch1 xuống 1 đơn vị (synch1=0), tiếp tục S2 được thực hiện, sau khi S2 thực hiện xong, lệnh signal(synch2) sẽ tăng lên 1 (synch2=1).
Khi synch2=1, tiến trình P2 chạy hoàn tất, P3 sẽ được mở khóa tại hàm wait(synch2) và thực thi lệnh S3
--> Luôn đảm bảo quy tắc S1 trước S2 và S2 trước S3.
nguyenphuongdung(I92C)- Tổng số bài gửi : 11
Join date : 14/09/2010
Similar topics
» Tổng hợp đồng bộ hóa tiến trình P1,P2,P3
» Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3
» Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3
» Tổng hợp đồng bộ hóa tiến trình P1,P2,P3
» Thảo luận Bài 7
» Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3
» Tổng hợp 3 bài đồng bộ hóa tiên trính P1,P2,P3
» Tổng hợp đồng bộ hóa tiến trình P1,P2,P3
» Thảo luận Bài 7
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết