Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
+8
buuhuynh
phuong.ntt-08h1010074
cathytranha
phamvietthanh
PhamThiKhanhHa
tranmongthuy
lqhlam
hienminhchau2005
12 posters
Trang 1 trong tổng số 2 trang
Trang 1 trong tổng số 2 trang • 1, 2
Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Giỏi quá đi
Thế bạn có thể giải thích lại về thuật giải nhà băng và hiền triết cùng ăn không ?
lqhlam- Tổng số bài gửi : 90
Join date : 17/03/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
lqhlam đã viết:Thế bạn có thể giải thích lại về thuật giải nhà băng và hiền triết cùng ăn không ?
Hi hi! Minh lay bai thi cua khóa truoc. Do la bai giai cua Thay To Tuan nen minh up len cho ngoai nguoi tham khao. Minh co up mot loat bai, do đều là đề thi của khóa truoc và Thầy To Tuan đã giải hoan chinh nen minh moi dam up len thoi. Chào ban!
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
thanks ban nhieu nha, minh cung dang tim bai nay
tranmongthuy- Tổng số bài gửi : 17
Join date : 19/02/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Khong co gi? Minh co cai nao thi share cho moi nguoi het?tranmongthuy đã viết:thanks ban nhieu nha, minh cung dang tim bai nay
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
hi hi
Thì ra là vậy. bạn ráng tìm thêm rồi úp cho moi người ha
lqhlam- Tổng số bài gửi : 90
Join date : 17/03/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Mình print ra để học thôi, thanks bạn nhiều nha
PhamThiKhanhHa- Tổng số bài gửi : 25
Join date : 04/03/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Cám ơn bạn nhiều, bạn có thể làm luôn thuật giải nhà băng luôn đi rồi post lên cho mọi người kham khảo.
phamvietthanh- Tổng số bài gửi : 32
Join date : 19/02/2009
Age : 44
nếu bạn cần
bạn vào câu hỏi ôn tập bạn down về có hết trong dấy
câu hòi ôn tập hệ điều hành
câu hòi ôn tập hệ điều hành
cathytranha- Tổng số bài gửi : 56
Join date : 20/02/2009
Bạn Châu Minh Hiền giỏi quá ta, cám ơn bạn post bài lên cho mọi người tham khảo
hienminhchau2005 đã viết:- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
phuong.ntt-08h1010074- Tổng số bài gửi : 137
Join date : 05/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Ui da, hom nay Rong den nha Tom sao? Ban Nguyen Thi THanh Phuong? Nho comment nhieu nhieu vô.phuong.ntt-08h1010074 đã viết:hienminhchau2005 đã viết:- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Kha nang cau nay dc ra de rat cao.phuong.ntt-08h1010074 đã viết:hienminhchau2005 đã viết:- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Khong co gi?tranmongthuy đã viết:thanks ban nhieu nha, minh cung dang tim bai nay
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Không có gi?PhamThiKhanhHa đã viết:Mình print ra để học thôi, thanks bạn nhiều nha
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Ko co j?phamvietthanh đã viết:Cám ơn bạn nhiều, bạn có thể làm luôn thuật giải nhà băng luôn đi rồi post lên cho mọi người kham khảo.
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Đọc bài này mình có chút ý kiến thế này mong các bạn góp ý, vấn để là ở assembler.Theo mình được biết assebler là trình biên dich. Máy tính làm việc bằng hợp ngữ, khi người dùng đưa dữ liều vào thì được assebler dich sang mã máy để máy tình thực thi chứ assembler không có khả năng sản sinh ra mã máy.Có thể bạn nhầm , và cũng có thể là kiến thức của tớ chưa tới mong các bạn góp ý .thankshienminhchau2005 đã viết:- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
buuhuynh- Tổng số bài gửi : 148
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Ủng hộ cho tang level?lqhlam đã viết:Thế bạn có thể giải thích lại về thuật giải nhà băng và hiền triết cùng ăn không ?
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
OK.lqhlam đã viết:Thì ra là vậy. bạn ráng tìm thêm rồi úp cho moi người ha
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Tang toc len cac ban oi!cathytranha đã viết:bạn vào câu hỏi ôn tập bạn down về có hết trong dấy
câu hòi ôn tập hệ điều hành
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Giai thuat DINING-PHILOSOPHERS (Coù DEADLOCK)
Moi nguoi co ai dang hoc giai thuat DINING-PHILOSOPHERS (Coù DEADLOCK) ko chi cho minh voi.
Day la giai thuat
DINING-PHILOSOPHERS (Có DEADLOCK)
#include <stdio.h>
#include <windows.h>
#define numPhilosophers 5
#define LEFT id
#define RIGHT (id+1)%numPhilosophers
HANDLE chopsticks[numPhilosophers];
char chState[numPhilosophers+1];
char phState[numPhilosophers+1];
void PhilosopherThread(int id){
while (1) {
// Suy nghĩ ...
Sleep(GetTickCount()%2000);
// Đói, do vậy lấy đũa bên Trái
phState[id]='d';
WaitForSingleObject(chopsticks[LEFT], INFINITE);
chState[LEFT]='0';
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
Sleep(GetTickCount()%100);
// Rồi lấy đũa bên Phải
WaitForSingleObject(chopsticks[RIGHT], INFINITE);
chState[RIGHT]='0';
// Bắt đầu ăn ...
phState[id]='a';
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
Sleep(GetTickCount()%1000);
// Ăn xong
phState[id]='-';
// Đặt đũa Trái xuống
chState[LEFT]='1';
ReleaseMutex(chopsticks[LEFT]);
// Đặt đũa Phải xuống
chState[RIGHT]='1';
ReleaseMutex(chopsticks[RIGHT]);
}
}
void main(){
HANDLE handles[numPhilosophers];
DWORD threadID; int i;
chState[numPhilosophers]='\\0'; phState[numPhilosophers]='\\0';
for (i=0; i<numPhilosophers; i++){
chState[i]='1'; phState[i]='-';
}
for (i=0; i<numPhilosophers; i++)
chopsticks[i]=CreateMutex(0, FALSE, 0);
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
for (i=0; i<numPhilosophers; i++)
handles[i]=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)PhilosopherThread,
(void *) i, 0, &threadID);
WaitForMultipleObjects(numPhilosophers, handles, TRUE, INFINITE);
for (i=0; i<numPhilosophers; i++) CloseHandle(chopsticks[i]);
}
Day la giai thuat
DINING-PHILOSOPHERS (Có DEADLOCK)
#include <stdio.h>
#include <windows.h>
#define numPhilosophers 5
#define LEFT id
#define RIGHT (id+1)%numPhilosophers
HANDLE chopsticks[numPhilosophers];
char chState[numPhilosophers+1];
char phState[numPhilosophers+1];
void PhilosopherThread(int id){
while (1) {
// Suy nghĩ ...
Sleep(GetTickCount()%2000);
// Đói, do vậy lấy đũa bên Trái
phState[id]='d';
WaitForSingleObject(chopsticks[LEFT], INFINITE);
chState[LEFT]='0';
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
Sleep(GetTickCount()%100);
// Rồi lấy đũa bên Phải
WaitForSingleObject(chopsticks[RIGHT], INFINITE);
chState[RIGHT]='0';
// Bắt đầu ăn ...
phState[id]='a';
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
Sleep(GetTickCount()%1000);
// Ăn xong
phState[id]='-';
// Đặt đũa Trái xuống
chState[LEFT]='1';
ReleaseMutex(chopsticks[LEFT]);
// Đặt đũa Phải xuống
chState[RIGHT]='1';
ReleaseMutex(chopsticks[RIGHT]);
}
}
void main(){
HANDLE handles[numPhilosophers];
DWORD threadID; int i;
chState[numPhilosophers]='\\0'; phState[numPhilosophers]='\\0';
for (i=0; i<numPhilosophers; i++){
chState[i]='1'; phState[i]='-';
}
for (i=0; i<numPhilosophers; i++)
chopsticks[i]=CreateMutex(0, FALSE, 0);
printf("- Chopsticks:\\t%s\\n Philosophers:\\t%s\\n\\n", chState, phState);
for (i=0; i<numPhilosophers; i++)
handles[i]=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)PhilosopherThread,
(void *) i, 0, &threadID);
WaitForMultipleObjects(numPhilosophers, handles, TRUE, INFINITE);
for (i=0; i<numPhilosophers; i++) CloseHandle(chopsticks[i]);
}
oanhtktrinh- Tổng số bài gửi : 64
Join date : 12/03/2009
Ui da, spam kìa
hienminhchau2005 đã viết:Tang toc len cac ban oi!cathytranha đã viết:bạn vào câu hỏi ôn tập bạn down về có hết trong dấy
câu hòi ôn tập hệ điều hành
Pó tay, spam kiếm exp nè, sang map mới train đi nào đồng chí Mod ơi, xử spamer này đi
Dù sao cũng cảm ơn vì đã post bài, ^^, thanks nhiều (và đừng comment trả lời nhá vì .... có 1 câu: không có j. )
TruongVanHieu_08H1010030- Tổng số bài gửi : 67
Join date : 23/03/2009
Age : 38
Đến từ : TP.HCM
Bạn Châu Minh Hiền tích cực thiệt đó!
Người ta thường bảo:"Cần cù bù thông minh mà". dù sao bạn cũng nhận được rất nhiều lời khen từ mọi người, cố gắng phát huy nha. Chúc bạn thi tốt!!
Mình nghĩ bài nào cũng cần coi kỹ cả, không loại trừ bài nào cả. Đoán mò là tiêu.
Mình nghĩ bài nào cũng cần coi kỹ cả, không loại trừ bài nào cả. Đoán mò là tiêu.
Được sửa bởi nguyenthiphuongchi ngày 13/5/2009, 10:31; sửa lần 1.
nguyenthiphuongchi- Tổng số bài gửi : 57
Join date : 24/02/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Cam on ban da spam dum minh nua nha!TruongVanHieu_08H1010030 đã viết:hienminhchau2005 đã viết:Tang toc len cac ban oi!cathytranha đã viết:bạn vào câu hỏi ôn tập bạn down về có hết trong dấy
câu hòi ôn tập hệ điều hành
Pó tay, spam kiếm exp nè, sang map mới train đi nào đồng chí Mod ơi, xử spamer này đi
Dù sao cũng cảm ơn vì đã post bài, ^^, thanks nhiều (và đừng comment trả lời nhá vì .... có 1 câu: không có j. )
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Cam on nha, Minh dang kiem rating cao ay manguyenthiphuongchi đã viết:Người ta thường bảo:"Cần cù bù thông minh mà". dù sao bạn cũng nhẫn được rất nhiều lời khen từ mọi người, cố gắng phát huy nha. Chúc bạn thi tốt!!
Mình nghĩ bài nào cũng cần coi kỹ cả, không loại trừ bài nào cả. Đoán mò là tiêu.
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Re: Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
Thanks ban da post len !oanhtktrinh đã viết:Moi nguoi co ai dang hoc giai thuat DINING-PHILOSOPHERS (Coù DEADLOCK) ko chi cho minh voi.
Day la giai thuat
DINING-PHILOSOPHERS (Có DEADLOCK)
#include <stdio.h>
#include <windows.h>
#define numPhilosophers 5
#define LEFT id
#define RIGHT (id+1)%numPhilosophers
HANDLE chopsticks[numPhilosophers];
char chState[numPhilosophers+1];
char phState[numPhilosophers+1];
void PhilosopherThread(int id){
while (1) {
// Suy nghĩ ...
Sleep(GetTickCount()%2000);
// Đói, do vậy lấy đũa bên Trái
phState[id]='d';
WaitForSingleObject(chopsticks[LEFT], INFINITE);
chState[LEFT]='0';
printf("- Chopsticks:\\\\t%s\\\\n Philosophers:\\\\t%s\\\\n\\\\n", chState, phState);
Sleep(GetTickCount()%100);
// Rồi lấy đũa bên Phải
WaitForSingleObject(chopsticks[RIGHT], INFINITE);
chState[RIGHT]='0';
// Bắt đầu ăn ...
phState[id]='a';
printf("- Chopsticks:\\\\t%s\\\\n Philosophers:\\\\t%s\\\\n\\\\n", chState, phState);
Sleep(GetTickCount()%1000);
// Ăn xong
phState[id]='-';
// Đặt đũa Trái xuống
chState[LEFT]='1';
ReleaseMutex(chopsticks[LEFT]);
// Đặt đũa Phải xuống
chState[RIGHT]='1';
ReleaseMutex(chopsticks[RIGHT]);
}
}
void main(){
HANDLE handles[numPhilosophers];
DWORD threadID; int i;
chState[numPhilosophers]='\\\\0'; phState[numPhilosophers]='\\\\0';
for (i=0; i<numPhilosophers; i++){
chState[i]='1'; phState[i]='-';
}
for (i=0; i<numPhilosophers; i++)
chopsticks[i]=CreateMutex(0, FALSE, 0);
printf("- Chopsticks:\\\\t%s\\\\n Philosophers:\\\\t%s\\\\n\\\\n", chState, phState);
for (i=0; i<numPhilosophers; i++)
handles[i]=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)PhilosopherThread,
(void *) i, 0, &threadID);
WaitForMultipleObjects(numPhilosophers, handles, TRUE, INFINITE);
for (i=0; i<numPhilosophers; i++) CloseHandle(chopsticks[i]);
}
hienminhchau2005- Tổng số bài gửi : 71
Join date : 06/05/2009
Trang 1 trong tổng số 2 trang • 1, 2
Trang 1 trong tổng số 2 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết