Câu 4: Vấn đề Người sản xuất – Người tiêu thụ (Producer-Consumer)code này đúng ko mấy anh chị ơi?
Trang 1 trong tổng số 1 trang
Câu 4: Vấn đề Người sản xuất – Người tiêu thụ (Producer-Consumer)code này đúng ko mấy anh chị ơi?
Vấn đề: hai tiến trình cùng chia sẻ một bộ đệm có kích thước giới hạn. Một trong hai tiến trình đóng vai trò người sản xuất – tạo ra dữ liệu và đặt dữ liệu vào bộ đệm- và tiến trình kia đóng vai trò người tiêu thụ – lấy dữ liệu từ bộ đệm ra để xử lý.
Để đồng bộ hóa hoạt động của hai tiến trình sản xuất tiêu thụ cần tuân thủ các quy định sau :
Tiến trình sản xuất (producer) không được ghi dữ liệu vào bộ đệm đã đầy (synchronisation)
Tiến trình tiêu thụ (consumer) không được đọc dữ liệu từ bộ đệm đang trống.(synchronisation)
Hai tiến trình sản xuất và tiêu thụ không được thao tác trên bộ đệm cùng lúc . (exclusion mutuelle)
Giải pháp:
Semaphore
Sử dụng ba semaphore : full, đếm số chỗ đã có dữ liệu trong bộ đệm; empty, đếm số chỗ còn trống trong bộ đệm; và mutex, kiểm tra việc Producer và Consumer không truy xuất đồng thời đến bộ đệm.
BufferSize = 3; // số chỗ trong bộ đệm
semaphore mutex = 1; // kiểm soát truy xuất độc quyền
semaphore empty = BufferSize; // số chỗ trống
semaphore full = 0; // số chỗ đầy
Producer()
{
int item;
while (TRUE) {
produce_item(&item); // tạo dữ liệu mới
down(&empty); // giảm số chỗ trống
down(&mutex); // báo hiệu vào miền găng
enter_item(item); // đặt dữ liệu vào bộ đệm
up(&mutex); // ra khỏi miền găng
up(&full); // tăng số chỗ đầy
}
}
Consumer()
{
int item;
while (TRUE) {
down(&full); // giảm số chỗ đầy
down(&mutex); // báo hiệu vào miền găng
remove_item(&item); // lấy dữ liệu từ bộ đệm
up(&mutex); // ra khỏi miền găng
up(&empty); // tăng số chỗ trống
consume_item(item); // xử lý dữ liệu
}
}
nguyentruongan03(HLT3)- Tổng số bài gửi : 22
Join date : 23/03/2014
Similar topics
» Thảo luận Bài 4
» Thảo luận Bài 4
» Thảo luận Bài 7
» code sản xuất và tiêu thụ
» code sản xuất tiêu thụ
» Thảo luận Bài 4
» Thảo luận Bài 7
» code sản xuất và tiêu thụ
» code sản xuất tiêu thụ
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