Dùng Semaphore giải quyết bài toán Sản xuất — Tiêu dùng
Trang 1 trong tổng số 1 trang
Dùng Semaphore giải quyết bài toán Sản xuất — Tiêu dùng
Trong hệ thống có 2 loại phần tử :
Sản xuất chuyên tạo sản phẩm mới và để vào kho chứa.
Tiêu dùng chuyên lấy sản phẩm từ kho chứa ra để sử dụng.
#define N 100 /*number of slots in the buffer*/
typedef int semaphone; /*semaphone are a special kind of int*/
semaphone mutex=1; /*controls access to critical region*/
semaphone empty=N; /*count empty buffer slots*/
semaphone full; /*count full buffer slots*/
void producer(void)
{
int item;
while(true) /*true is the constant 1*/
{
produce_item(&item);/* generate something to put in buffer*/
down(&empty);/* decrement empty count*/
dow(&mutex); /*enter critical region*/
enter_item(&item); /*put new item in buffer*/
up(&mutex); /*leave critical region*/
up(&full); /*increment count of full slots*/
}
}
void consumer(void)
{
int item;
while(true) /*infinite loop*/
{
down(&full);/* decrement full count*/
dow(&mutex); /*enter critical region*/
remove_item(&item); /*take item from buffer*/
up(&mutex); /*leave critical region*/
up(&empty); /*increment count of full slots*/
consumer_item(item); /*do something with the item*/
}
}
Sản xuất chuyên tạo sản phẩm mới và để vào kho chứa.
Tiêu dùng chuyên lấy sản phẩm từ kho chứa ra để sử dụng.
#define N 100 /*number of slots in the buffer*/
typedef int semaphone; /*semaphone are a special kind of int*/
semaphone mutex=1; /*controls access to critical region*/
semaphone empty=N; /*count empty buffer slots*/
semaphone full; /*count full buffer slots*/
void producer(void)
{
int item;
while(true) /*true is the constant 1*/
{
produce_item(&item);/* generate something to put in buffer*/
down(&empty);/* decrement empty count*/
dow(&mutex); /*enter critical region*/
enter_item(&item); /*put new item in buffer*/
up(&mutex); /*leave critical region*/
up(&full); /*increment count of full slots*/
}
}
void consumer(void)
{
int item;
while(true) /*infinite loop*/
{
down(&full);/* decrement full count*/
dow(&mutex); /*enter critical region*/
remove_item(&item); /*take item from buffer*/
up(&mutex); /*leave critical region*/
up(&empty); /*increment count of full slots*/
consumer_item(item); /*do something with the item*/
}
}
Phamvantoan(I22A)- Tổng số bài gửi : 13
Join date : 13/03/2013
Age : 34
Đến từ : Thanh Hóa
Similar topics
» Thảo luận Bài 7
» Thảo luận Bài 7
» Thảo luận Bài 4
» Giải thích 1 số hàm API dùng lập trình Bài toán Sản xuất-Tiêu thụ
» Thảo luận Bài 5
» Thảo luận Bài 7
» Thảo luận Bài 4
» Giải thích 1 số hàm API dùng lập trình Bài toán Sản xuất-Tiêu thụ
» Thảo luận Bài 5
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