Thuật giải dẫn đến Deadlock:
3 posters
Trang 1 trong tổng số 1 trang
Thuật giải dẫn đến Deadlock:
Code (Hiền triết cùng ăn):
#define n 5 // số hiền triết là 5
#define LEFT id // id là số hiệu nhà hiền triết
#define RIGHT (id+1) % n
semaphore chopsticks[n];
// Nghĩ
wait(chopsticks[LEFT]); // Tìm cách nhấc đũa Trái
wait(chopsticks[RIGHT]); // Tìm cách nhấc đũa Phải
// Ăn
signal(chopsticks[LEFT]); // Đặt đũa Trái xuống
signal(chopsticks[RIGHT]); // Đặt đũa Phải xuống
#define n 5 // số hiền triết là 5
#define LEFT id // id là số hiệu nhà hiền triết
#define RIGHT (id+1) % n
semaphore chopsticks[n];
semaphore cs[2]; // Mảng trung gian
// Nghĩ
cs[0]=chopsticks[LEFT]; // Gửi mục quản của đèn bên Trái vào cs[0]
cs[1]=chopsticks[RIGHT]; // Gửi mục quản của đèn bên Phải vào cs[1]
wait(cs); // Chờ đến khi cả 2 đèn Trái-Phải có màu Xanh
// Ăn
signal(chopsticks[LEFT]); // Đặt đũa Trái xuống
signal(chopsticks[RIGHT]); // Đặt đũa Phải xuống
Code (Sản xuất - Tiêu thự):
#define BUFFER_SIZE 10 // Khai bao kich thuoc bo dem
HANDLE semEmpty, semFull; // hai den hieu
CRITICAL_SECTION critSec; // bien kieu Mutex
// ... Sản xuất
// Chờ đến khi có chỗ trống
WaitForSingleObject(semEmpty, INFINITE);
EnterCriticalSection(&critSec) // vào đoạn tương tranh
// Tăng (semFull) lên 1
ReleaseSemaphore(semFull, 1, NULL);
LeaveCriticalSection(&critSec) // rời khỏi đoạn tương tranh
// ... Tieu thu
// Chờ đến khi có sản phẩm
WaitForSingleObject(semFull, INFINITE);
EnterCriticalSection(&critSec) // Vào đoạn tương tranh
ReleaseSemaphore (semEmpty, 1, NULL) // Tăng (semEmpty) lên 1
LeaveCriticalSection(&critSec); // Rời khỏi đoạn tương tranh
// ... Tiêu thụ (nextConsumed)
#define n 5 // số hiền triết là 5
#define LEFT id // id là số hiệu nhà hiền triết
#define RIGHT (id+1) % n
semaphore chopsticks[n];
// Nghĩ
wait(chopsticks[LEFT]); // Tìm cách nhấc đũa Trái
wait(chopsticks[RIGHT]); // Tìm cách nhấc đũa Phải
// Ăn
signal(chopsticks[LEFT]); // Đặt đũa Trái xuống
signal(chopsticks[RIGHT]); // Đặt đũa Phải xuống
#define n 5 // số hiền triết là 5
#define LEFT id // id là số hiệu nhà hiền triết
#define RIGHT (id+1) % n
semaphore chopsticks[n];
semaphore cs[2]; // Mảng trung gian
// Nghĩ
cs[0]=chopsticks[LEFT]; // Gửi mục quản của đèn bên Trái vào cs[0]
cs[1]=chopsticks[RIGHT]; // Gửi mục quản của đèn bên Phải vào cs[1]
wait(cs); // Chờ đến khi cả 2 đèn Trái-Phải có màu Xanh
// Ăn
signal(chopsticks[LEFT]); // Đặt đũa Trái xuống
signal(chopsticks[RIGHT]); // Đặt đũa Phải xuống
Code (Sản xuất - Tiêu thự):
#define BUFFER_SIZE 10 // Khai bao kich thuoc bo dem
HANDLE semEmpty, semFull; // hai den hieu
CRITICAL_SECTION critSec; // bien kieu Mutex
// ... Sản xuất
// Chờ đến khi có chỗ trống
WaitForSingleObject(semEmpty, INFINITE);
EnterCriticalSection(&critSec) // vào đoạn tương tranh
// Tăng (semFull) lên 1
ReleaseSemaphore(semFull, 1, NULL);
LeaveCriticalSection(&critSec) // rời khỏi đoạn tương tranh
// ... Tieu thu
// Chờ đến khi có sản phẩm
WaitForSingleObject(semFull, INFINITE);
EnterCriticalSection(&critSec) // Vào đoạn tương tranh
ReleaseSemaphore (semEmpty, 1, NULL) // Tăng (semEmpty) lên 1
LeaveCriticalSection(&critSec); // Rời khỏi đoạn tương tranh
// ... Tiêu thụ (nextConsumed)
HaVietAnh(I92C)- Tổng số bài gửi : 62
Join date : 14/09/2010
Thuật giải dẫn đến Deadlock:
Các đèn hiệu
Code:
semaphore semEmpty=BUFFER_SIZE;
semaphore semFull=0;
semaphore critSec=1;
Code:
semaphore semEmpty=BUFFER_SIZE;
semaphore semFull=0;
semaphore critSec=1;
HaVietAnh(I92C)- Tổng số bài gửi : 62
Join date : 14/09/2010
Re: Thuật giải dẫn đến Deadlock:
Producer
Code:
while(1){
wait(semEmpty);
wait(critSec);
// Đưa sản phẩm vào Buffer
signal(semFull);
signal(critSec);
}
Code:
while(1){
wait(semEmpty);
wait(critSec);
// Đưa sản phẩm vào Buffer
signal(semFull);
signal(critSec);
}
HaVietAnh(I92C)- Tổng số bài gửi : 62
Join date : 14/09/2010
Re: Thuật giải dẫn đến Deadlock:
Consumer
Code:
while(1){
wait(semFull);
wait(critSec);
// Lấy sản phẩm từ Buffer
signal(semEmpty);
signal(critSec);
}
Admin
- Trình bày xuất sắc ! Rất hiểu vấn đề. Sự việc đơn giản thế thôi.
- Kỳ này, khá nhiều bạn điểm cao đấy.
- Nên quan tâm đến hình thức thể hiện (đậm/nhạt/gạch dưới/nghiêng/màu sắc) !
Code:
while(1){
wait(semFull);
wait(critSec);
// Lấy sản phẩm từ Buffer
signal(semEmpty);
signal(critSec);
}
Admin
- Trình bày xuất sắc ! Rất hiểu vấn đề. Sự việc đơn giản thế thôi.
- Kỳ này, khá nhiều bạn điểm cao đấy.
- Nên quan tâm đến hình thức thể hiện (đậm/nhạt/gạch dưới/nghiêng/màu sắc) !
HaVietAnh(I92C)- Tổng số bài gửi : 62
Join date : 14/09/2010
Hay quá
Bạn VietAnh ghi chú rõ từng bài giảng của thầy. Cảm ơn bạn nhiều
hoainam_I83C- Tổng số bài gửi : 40
Join date : 03/12/2009
Re: Thuật giải dẫn đến Deadlock:
Hình như thầy nói bài toàn Hiền triết cùng ăn không ra thi thì phải!!!
KimThao_I83C_08H1012087- Tổng số bài gửi : 49
Join date : 14/09/2009
Age : 39
Đến từ : TP.Hồ Chí Minh
Similar topics
» Thảo luận Bài 6
» Bài toán Sản xuất - Tiêu thụ (Trong Bài 4 - Quản lí tiến trình) post đây để dễ theo dõi !!!
» Thảo luận Bài 4
» Cách giải bài tập về các thuật giải điều phối CPU (Thuật giải RRS )
» Thảo luận Bài 6
» Bài toán Sản xuất - Tiêu thụ (Trong Bài 4 - Quản lí tiến trình) post đây để dễ theo dõi !!!
» Thảo luận Bài 4
» Cách giải bài tập về các thuật giải điều phối CPU (Thuật giải RRS )
» Thảo luận Bài 6
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