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.

Thuật giải dẫn đến Deadlock:

3 posters

Go down

Thuật giải dẫn đến Deadlock: Empty Thuật giải dẫn đến Deadlock:

Bài gửi  HaVietAnh(I92C) 23/11/2010, 22:09

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)

HaVietAnh(I92C)

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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Thuật giải dẫn đến Deadlock:

Bài gửi  HaVietAnh(I92C) 23/11/2010, 22:10

Các đèn hiệu
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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Re: Thuật giải dẫn đến Deadlock:

Bài gửi  HaVietAnh(I92C) 23/11/2010, 22:11

Producer
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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Re: Thuật giải dẫn đến Deadlock:

Bài gửi  HaVietAnh(I92C) 23/11/2010, 22:11

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) !

HaVietAnh(I92C)

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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Hay quá

Bài gửi  hoainam_I83C 29/11/2010, 12:59

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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Re: Thuật giải dẫn đến Deadlock:

Bài gửi  KimThao_I83C_08H1012087 29/11/2010, 16:21

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

Về Đầu Trang Go down

Thuật giải dẫn đến Deadlock: Empty Re: Thuật giải dẫn đến Deadlock:

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