Danh mục

Các vấn đề cổ điển của đồng bộ hóa

Số trang: 27      Loại file: pdf      Dung lượng: 681.63 KB      Lượt xem: 14      Lượt tải: 0    
Hoai.2512

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

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ý.
Nội dung trích xuất từ tài liệu:
Các vấn đề cổ điển của đồng bộ hóaIII. CÁC VấN Đề Cổ ĐIểN CủA ĐồNG Bộ HOÁNguồn:3c.com.vn III.1. Vấn đề Người sản xuất – Người tiêu thụ (Producer-Consumer) 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 ttiế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 ttrình kia đóng vai trò người tiêu thụ – lấy dữ liệu từ bộ đệm ra để xử lý. Hình 3.17 Producer và ConsumerĐể đồ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 địnhsau : 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 đangtrố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 . (exclusionmutuelle) Giải pháp: III.1.1. SemaphoreSử 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ộ đệmsemaphore mutex = 1; // kiểm soát truy xuất độcquyềnsemaphore empty = BufferSize; // số chỗ trốngsemaphore full = 0; / / s ố ch ỗ đầ yProducer(){ int item; while (TRUE) { produce_item(&item); i // 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 ă n g s ố c h ỗ đầ y }}Consumer(){ int item; while (TRUE) { down(&full); / / g i ả m s ố c h ỗ đầ 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); i // xử lý dữ liệu }} III.1.2. MonitorĐịnh nghĩa một monitor ProducerConsumer với hai thủ tục enter và remove thao táctrên bộ đệm. Xử lý của các thủ tục này phụ thuộc vào các biến điều kiện full và empty. fu tymonitor ProducerConsumer condition full, empty; int count; procedure enter(); { if (count == N) wait(full); // nếu bộ đệm đầy, phải chờ enter_item(item); // đặt dữ liệu vào bộ đệm count ++; / / t ă n g s ố c h ỗ đầ y if (count == 1) // nếu bộ đệm không trống signal(empty); // thì kích hoạt Consumer } procedure remove(); { if (count == 0) wait(empty) // nếu bộ đệm trống, chờ remove_item(&item); // l ấ y d ữ li ệ u t ừ b ộ đệ m count --; // giảm số chỗ đầy if (count == N-1) // nếu bộ đệm không đầy signal(full); // thì kích hoạt Producer } count = 0; end monitor; Producer(); { while (TRUE) { produce_item(&item); ProducerConsumer.enter; } } Consumer(); { while (TRUE) { ProducerConsumer.remove; consume_item(item); } } III.1.3. Trao đổi thông điệpThông điệp empty hàm ý có một chỗ trống trong bộ đệm. Tiến t ình Consumer bắt đầu trcông việc bằng cách gởi 4 thông điệp empty đấng Producer. Tiến trình Producer tạo ramột dữ liệu mới và chờ đến khi nhận được một thông điệp empty thì gởi ngược lại choConsumer một thông điệp chứa dữ liệu . Tiến trình Consumer chờ nhận thông điệp chứadữ liệu, và sau khi xử lý xong dữ liệu này, Consumer sẽ lại gởi một thông điệp empty đếnProducer, ...BufferSize = 4;Producteur(){ int item; message m; // thông điệp while (TRUE) { produce_item(&item); receive(consumer,&m); // chờ thông điệp empty create_message(&m, item); // tạo thông điệp dữliệu send(consumer,&m); // gởi dữ liệu đến Consumer }}Consumer(){ int item; message m; for(0 to N) send(producer, &m); // gởi N thông điệp empty while (TRUE) { receive(producer, &m); // chờ thông điệp dữliệu remove_item(&m,&item);// lấy dữ liệu từ thông điệp send(producer, &m); // gởi thông điệpempty consumer_item(item); // xử lý dữ liệu }} III.2. Mô hình Readers- ...

Tài liệu được xem nhiều: