Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng

Go down

Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng Empty Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng

Bài gửi  HuynhTrungLoi-I11C 7/10/2011, 13:20

Chào thầy và các bạn,
Về bài toán Sản xuất và Tiêu thụ áp dụng đa luồng em xin có ý kiến:
- Đối với vấn đề nhà Tiêu thụ(Consumer): khi trường hợp 2 con trỏ cur_in và cur_out bằng nhau, chương trình sẻ quẩn quanh ở vòng lặp while. Việc quẩn quanh vòng lặp này tốn rất nhiều tài nguyên CPU(em thử và thấy CPU luôn chạy 100%), trong khi trên thực tế trạng thái chờ này thường chiếm đa số thời gian làm việc của một tiến trình, vì không phải lúc nào củng có hàng do nhà sản xuất cung cấp để xử lý. Do đó em nghỉ nên cần có phương án để giảm tải cho CPU trong trường hợp này.

- Hiện tại thì em dùng thủ thuật nhỏ là : trong trường hợp cur_in và cur_out bằng nhau thì cho luồng đó tạm ngủ(Sleep) trong một khoảng thời gian nhất định, sau khoản thời gian đó sẻ tiếp tục tiến trình như củ. Qua thử nghiệm thì thấy CPU giảm tải được khá nhiều, không còn trường hợp 100% liên tục nữa.

Code:
const int BUFFER_SIZE = 10;
static int[] buffer = new int[BUFFER_SIZE];
static int cur_in = 0;
static int cur_out = 0;
public static void Consumer()
  {
            int nextConsumed;
            while (true)
            {
                while (cur_in == cur_out)
                    Thread.Sleep(500);// cho luồng ngủ trong 500 mili giây

                nextConsumed = buffer[cur_out];

                cur_out = (cur_out + 1) % BUFFER_SIZE;

                // ... Tiêu Thụ (nextConsumed)
            }
 }

Mong thầy và các bạn góp ý thêm...
Xin cảm ơn



HuynhTrungLoi-I11C

Tổng số bài gửi : 27
Join date : 05/09/2011

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết