Thực thi vấn đề sản xuất và tiêu thụ
Trang 1 trong tổng số 1 trang
Thực thi vấn đề sản xuất và tiêu thụ
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int in=0;
int out=0;
int nextProduced=1;
void Producer(){
while (1){
// ... Saûn xuaát (nextProduced)
while(((in+1)%BUFFER_SIZE)==out);
buffer[in]=nextProduced++;
in=(in+1)%BUFFER_SIZE;
SuspendThread(GetCurrentThread());
}
}
void Consumer(){
int nextConsumed;
while (1){
while(in==out);
nextConsumed=buffer[out];
out=(out+1)%BUFFER_SIZE;
// ... Tieâu thuï (nextConsumed)
Sleep(GetTickCount()%5000);
}
}
void ShowBuffer(){ // In noäi dung Buffer
const char * LeftMargin="\n\t";
int i;
printf(LeftMargin);
for(i=0; i<(in*5);i++) putchar(' '); printf("!in");
printf(LeftMargin);
for (i=0; i<BUFFER_SIZE-1; i++)
printf("S%2d, ",buffer[i]);
printf("S%2d",buffer[BUFFER_SIZE-1]);
printf(LeftMargin);
for(i=0; i<(out*5); i++) putchar(' ');printf("^out");
printf("\n");
}
int main(){
HANDLE ProducerHandle1, ProducerHandle2;
HANDLE ConsumerHandle1, ConsumerHandle2;
DWORD ProducerID1, ProducerID2;
DWORD ConsumerID1, ConsumerID2;
// Taïo 2 luoàng Saûn xuaát trong traïng thaùi nguû
ProducerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID1);
ProducerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID2);
// Taïo 2 luoàng Tieâu thuï thi haønh ngay
ConsumerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID1);
ConsumerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID2);
while(1){
printf("\n- Nhaán P/p ñeå saûn xuaát, 0 ñeå keát thuùc:”);
switch (getch()){
case 'P':
ResumeThread(ProducerHandle1);
break;
case 'p':
ResumeThread(ProducerHandle2);
break;
case '0':
CloseHandle(ProducerHandle1);
CloseHandle(ProducerHandle2);
CloseHandle(ConsumerHandle1);
CloseHandle(ConsumerHandle2);
return 0;
}
Sleep(1);
ShowBuffer();
}
}
#include <conio.h>
#include <windows.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int in=0;
int out=0;
int nextProduced=1;
void Producer(){
while (1){
// ... Saûn xuaát (nextProduced)
while(((in+1)%BUFFER_SIZE)==out);
buffer[in]=nextProduced++;
in=(in+1)%BUFFER_SIZE;
SuspendThread(GetCurrentThread());
}
}
void Consumer(){
int nextConsumed;
while (1){
while(in==out);
nextConsumed=buffer[out];
out=(out+1)%BUFFER_SIZE;
// ... Tieâu thuï (nextConsumed)
Sleep(GetTickCount()%5000);
}
}
void ShowBuffer(){ // In noäi dung Buffer
const char * LeftMargin="\n\t";
int i;
printf(LeftMargin);
for(i=0; i<(in*5);i++) putchar(' '); printf("!in");
printf(LeftMargin);
for (i=0; i<BUFFER_SIZE-1; i++)
printf("S%2d, ",buffer[i]);
printf("S%2d",buffer[BUFFER_SIZE-1]);
printf(LeftMargin);
for(i=0; i<(out*5); i++) putchar(' ');printf("^out");
printf("\n");
}
int main(){
HANDLE ProducerHandle1, ProducerHandle2;
HANDLE ConsumerHandle1, ConsumerHandle2;
DWORD ProducerID1, ProducerID2;
DWORD ConsumerID1, ConsumerID2;
// Taïo 2 luoàng Saûn xuaát trong traïng thaùi nguû
ProducerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID1);
ProducerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID2);
// Taïo 2 luoàng Tieâu thuï thi haønh ngay
ConsumerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID1);
ConsumerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID2);
while(1){
printf("\n- Nhaán P/p ñeå saûn xuaát, 0 ñeå keát thuùc:”);
switch (getch()){
case 'P':
ResumeThread(ProducerHandle1);
break;
case 'p':
ResumeThread(ProducerHandle2);
break;
case '0':
CloseHandle(ProducerHandle1);
CloseHandle(ProducerHandle2);
CloseHandle(ConsumerHandle1);
CloseHandle(ConsumerHandle2);
return 0;
}
Sleep(1);
ShowBuffer();
}
}
TranQuyThanh (I11C)- Tổng số bài gửi : 53
Join date : 30/08/2011
Similar topics
» Thảo luận thực thi vấn đề sản xuất và tiêu thụ
» Thực thi vấn đề sản xuất và tiêu thụ
» Thảo luận Bài 5
» Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng
» Giải thích về code thực thi sản xuất và tiêu thụ
» Thực thi vấn đề sản xuất và tiêu thụ
» Thảo luận Bài 5
» Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng
» Giải thích về code thực thi sản xuất và 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