Busy waiting.
2 posters
Trang 1 trong tổng số 1 trang
Busy waiting.
Các bạn ơi mình có đi thực hành nhưng chưa hiểu lắm về bài 5, chỗ dùng busy waitting ấy
Giup mình với
Thanks,
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);
}
}
Giup mình với
Thanks,
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);
}
}
HoThiVuong2009- Tổng số bài gửi : 87
Join date : 19/02/2009
Age : 40
Đến từ : Phú Yên
Re: Busy waiting.
Theo mình hiểu thì như thế này, bạn nào thấy sai sót thì bỏ sung nhé:
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE]; //kho chứa được 10 sản phẩm (từ 0 đến 9)
int in=0; // vị trí ban đầu nhà SX
int out=0;// vị trí ban đầu nhà TT
(in = out : kho đầy hoặc chưa có sản phẩm nào)
int nextProduced=1; // Số hiệu ban đầu của sản phẩm
void Producer()
{ while (1)
{
// Sản xuất, lần lập đầu tiên (in=0)
while(((in+1)%BUFFER_SIZE)==out)
=> (0+1)%10)= 1 # out = 0 // kho còn chổ trống để đặt 1 sản phẩm vào, lập đến khi nào còn chổ trống trong kho
=> liên tục kiểm tra xem còn trống không (chờ bận) => tốn CPU
buffer[in]=nextProduced++;
// Đưa 1 sản phẩm vào (gán trước, ++ sau), lúc đó buffer[0] = 1, nextProduced = 2
in=(in+1)%BUFFER_SIZE;
// Tìm vị trí kế để đặt sản phẩm, có xoay vòng khi in = 0 thì in = (0+1)%10 = 1, khi in = 9 thì in = (9+1)%10 = 0 quay lại đầu mảng.
SuspendThread(GetCurrentThread());
// Luồng hiện hành (nhà sản xuất) sản xuất xong 1 sản phẩm thì tạm thời ngủ và chờ đánh thức.
}
}
void Consumer()
{ // Tieu thu
int nextConsumed;
while (1)
{
while(in==out) //liên tục kiểm tra còn sản phẩm không, kho trống thì thoát
nextConsumed=buffer[out]; // lấy 1 sản phẩm ra
out=(out+1)%BUFFER_SIZE; // lấy sản phẩm có xoay vòng
Sleep(GetTickCount()%5000); //TT xong ngủ 1 thời gian
}
}
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE]; //kho chứa được 10 sản phẩm (từ 0 đến 9)
int in=0; // vị trí ban đầu nhà SX
int out=0;// vị trí ban đầu nhà TT
(in = out : kho đầy hoặc chưa có sản phẩm nào)
int nextProduced=1; // Số hiệu ban đầu của sản phẩm
void Producer()
{ while (1)
{
// Sản xuất, lần lập đầu tiên (in=0)
while(((in+1)%BUFFER_SIZE)==out)
=> (0+1)%10)= 1 # out = 0 // kho còn chổ trống để đặt 1 sản phẩm vào, lập đến khi nào còn chổ trống trong kho
=> liên tục kiểm tra xem còn trống không (chờ bận) => tốn CPU
buffer[in]=nextProduced++;
// Đưa 1 sản phẩm vào (gán trước, ++ sau), lúc đó buffer[0] = 1, nextProduced = 2
in=(in+1)%BUFFER_SIZE;
// Tìm vị trí kế để đặt sản phẩm, có xoay vòng khi in = 0 thì in = (0+1)%10 = 1, khi in = 9 thì in = (9+1)%10 = 0 quay lại đầu mảng.
SuspendThread(GetCurrentThread());
// Luồng hiện hành (nhà sản xuất) sản xuất xong 1 sản phẩm thì tạm thời ngủ và chờ đánh thức.
}
}
void Consumer()
{ // Tieu thu
int nextConsumed;
while (1)
{
while(in==out) //liên tục kiểm tra còn sản phẩm không, kho trống thì thoát
nextConsumed=buffer[out]; // lấy 1 sản phẩm ra
out=(out+1)%BUFFER_SIZE; // lấy sản phẩm có xoay vòng
Sleep(GetTickCount()%5000); //TT xong ngủ 1 thời gian
}
}
Nothing- Tổng số bài gửi : 36
Join date : 05/03/2009
Similar topics
» Thi Kiểm tra Giữa kỳ
» vì sao HDH lại có thể chạy được trong vòng lặp vô tận (busy waiting)
» Thảo luận Bài 4
» 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.
» Thảo luận Bài 4
» vì sao HDH lại có thể chạy được trong vòng lặp vô tận (busy waiting)
» Thảo luận Bài 4
» 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.
» Thảo luận Bài 4
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