HUYNHPHUONG
Joined : 12 May 2008 Posts : 40
 | Subject: TRINH BAY BT SAN XUAT_TIEU THU 28/6/2008, 16:02 | |
| Thầy ơi! Bài toán SX_TT tŕnh bày như thế này đúng không Thầy?
#define BUFFER_SIZE 10 // Khai bao kich thuoc bo dem HANDLE semEmpty, semFull; // hai den hieu CRITICAL_SECTION critSec; // bien kieu Mutex
PRODUCER (Sản xuất)
// Chờ đến khi có chỗ trống WaitForSingleObject(semEmpty, INFINITE); // Xin phep vao vung tuong tranh EnterCriticalSection(&critSec); // Tăng (semFull) lên 1 ReleaseSemaphore(semFull, 1, NULL); // Roi khoi vung tuong tranh LeaveCriticalSection(&critSec); // Tam ngung luong hien hanh SuspendThread(GetCurrentThread());
CONSUMER (Tieu thu)
// Chờ đến khi có sản phẩm WaitForSingleObject(semFull, INFINITE); // Vao doan tuong tranh EnterCriticalSection(&critSec); // Tăng (semEmpty) lên 1 ReleaseSemaphore (semEmpty, 1, NULL); // Roi khoi doan tuong tranh LeaveCriticalSection(&critSec); // ... Tiêu thụ (nextConsumed) // Tieu thu xong thi tam ngung luong hien hanh SuspendThread(GetCurrentThread()); Admin: Đúng, nhưng c̣n chi tiết và rắc rối quá. Khó nhớ ! |
|
HUYNHPHUONG
Joined : 12 May 2008 Posts : 40
 | Subject: Re: TRINH BAY BT SAN XUAT_TIEU THU 30/6/2008, 08:48 | |
| | HUYNHPHUONG wrote: | Bài toán SX_TT tŕnh bày như thế này đúng không Thầy?
#define BUFFER_SIZE 10 // Khai bao kich thuoc bo dem HANDLE semEmpty, semFull; // hai den hieu CRITICAL_SECTION critSec; // bien kieu Mutex
PRODUCER (Sản xuất)
// Chờ đến khi có chỗ trống WaitForSingleObject(semEmpty, INFINITE); // Xử lư đoạn tương tranh // Tam ngung luong hien hanh SuspendThread(GetCurrentThread());
CONSUMER (Tieu thu)
// Chờ đến khi có sản phẩm WaitForSingleObject(semFull, INFINITE); // Xử lư đoạn tương tranh // ... Tiêu thụ (nextConsumed) // Tieu thu xong thi tam ngung luong hien hanh SuspendThread(GetCurrentThread());
Thầy ơi! Thầy xem lại dùm em
|
Admin: Bây giờ th́ lại sai ! |
|
HUYNHPHUONG
Joined : 12 May 2008 Posts : 40
 | Subject: Re: TRINH BAY BT SAN XUAT_TIEU THU 30/6/2008, 15:01 | |
|
#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)
Thầy xem lại dùm em nhé!
Admin: Tốt hơn hẳn rồi đấy, nhưng thày muốn có mă như sau:
Các đèn hiệu
| Code: | semaphore semEmpty=BUFFER_SIZE; semaphore semFull=0; semaphore critSec=1;
|
Producer
| Code: | while(1){ wait(semEmpty); wait(critSec); // Đưa sản phẩm vào Buffer signal(semFull); signal(critSec); }
|
Consumer
| Code: | while(1){ wait(semFull); wait(critSec); // Lấy sản phẩm từ Buffer signal(semEmpty); signal(critSec); }
|
|
|