Đồng bộ nhiều quá trình

Một phần của tài liệu Bài giảng Hệ thống máy tính: Chương 6 - TS. Trần Thị Minh Khoa (Trang 83 - 99)

-84-

PRODUCER BOUNDED CONSUMER

BUFFER

 Bài toán Producer-Consumer

 Bài toán 5 triết gia ăn tối

 Bài tốn tiệm cắt tóc Một số bài tốn về đồng bộ

-92-

Dining philosophers: Semaphore

semaphore mutex = 1;

semaphore s[N];

void philosopher( int i) // i : xác định triết gia nào (0..N-1) {

while (TRUE) {

take_forks(i); // yêu cầu đến khi cĩ đủ 2 nĩa eat(); // yum-yum, spaghetti

put_forks(i); // đặt cả 2 nĩa lên bàn lại thinhk(); // Suy nghĩ

}} }

-93-

Dining philosophers: Semaphore

void take_forks ( int i) // i : xác định triết gia nào (0..N-1) {

while (TRUE) {

down(mutex); // vào miền găng

state[i] = HUNGRY; // ghi nhận triết gia i đã đĩi test(i); // cố gắng lấy 2 nĩa

up(mutex); // ra khỏi miền găng

down(s[i]); // chờ nếu khơng cĩ đủ 2 nĩa }

-94-

Dining philosophers: Semaphore

void put_forks ( int i) // i : xác định triết gia nào (0..N-1) {

while (TRUE) {

down(mutex); // vào miền găng

state[i] = THINKING; // ghi nhận triết gia i ăn xong test(LEFT); // kiểm tra người bên trái đã cĩ thể ăn? test(RIGHT); // kiểm tra người bên phải đã cĩ thể ăn? up(mutex); // ra khỏi miền găng

}} }

-98-

Bài 1. Một biến X được chia sẻ bởi hai tiến trình cùng thực hiện đoạn

code sau : do

X = X +1;

if ( X == 20) X = 0; while ( TRUE );

Bắt đầu với giá trị X = 0, chứng tỏ rằng giá trị X cĩ thể vượt quá 20. Cần sửa chữa đoạn chương trình trên như thế nào để bảo đảm X khơng vượt quá 20 ?

Bài 2.Xét hai tiến trình xử lý đoạn chương trình sau :

process P1 { A1 ; A2 } process P2 { B1 ; B2 }

Đồng bộ hố hoạt động của hai tiến trình này sao cho cả A1 và B1 đều hồn tất trước khi A2 hay B2 bắt đầu .

Bài 3. Trong giải pháp Semaphore cho bài tốn triết gia, tại sao phải

đặt state[i] = HUNGRY trong take_forks ?

Một phần của tài liệu Bài giảng Hệ thống máy tính: Chương 6 - TS. Trần Thị Minh Khoa (Trang 83 - 99)

Tải bản đầy đủ (PDF)

(119 trang)