Theo như tôi biết, không có triển khai chung cho nó, ngoài API MPI. Bạn nên sử dụng các hàm chính xác theo các ràng buộc của vấn đề.
Nếu những gì bạn đang cố gắng xây dựng hàng đợi công việc/dữ liệu n-nhà sản xuất và người tiêu dùng n đơn giản, thì tất nhiên đã có nhiều triển khai ngoài đó (chỉ cần google và bạn sẽ nhận được một vài) . Tuy nhiên, cách bạn trình bày nó có vẻ rất chung chung - đôi khi bạn muốn dữ liệu chỉ được gửi đến một người tiêu dùng, đôi khi cho tất cả người dùng, v.v. Trong trường hợp đó, bạn nên tìm ra điều bạn muốn và khi nào, và sử dụng các chức năng giao tiếp điểm-điểm, hoặc các chức năng giao tiếp tập thể, và tất nhiên mọi người phải biết điều gì sẽ xảy ra - bạn không thể có người tiêu dùng chờ dữ liệu từ một nguồn, trong khi nhà sản xuất muốn phát dữ liệu...). Tất cả những điều đó sang một bên, đây là một trong những thực hiện mà đến với tâm trí mà dường như để trả lời tất cả các yêu cầu của bạn:
Thực hiện một hàng đợi đồng bộ, nhà sản xuất đẩy dữ liệu ở một đầu, người tiêu dùng lấy nó từ bên kia (quyết định tất cả các loại của các hành vi cho hàng đợi khi bạn cần - là kích thước hàng đợi có giới hạn, không thêm phần tử vào một khối hàng đợi đầy đủ hay không, loại bỏ một phần tử khỏi một khối hàng đợi rỗng hoặc không thành công, v.v.).
Giả sử dữ liệu chứa một số cờ cho người tiêu dùng biết nếu dữ liệu này dành cho tất cả mọi người hoặc chỉ cho một trong số họ, người tiêu dùng nhìn trộm và xóa phần tử hoặc để nguyên và lưu ý rằng họ đã làm điều đó id của nó tại địa phương, hoặc bằng cách thay đổi một lá cờ trong chính dữ liệu).
Nếu bạn không muốn một phần dữ liệu tập thể chặn cho đến khi mọi người xử lý, bạn có thể sử dụng 2 hàng đợi, một hàng cho mỗi loại dữ liệu và người tiêu dùng sẽ lấy dữ liệu từ một trong các hàng đợi tại một thời điểm (hoặc bằng cách chọn một hàng đợi khác nhau mỗi lần, chọn ngẫu nhiên một hàng đợi, ưu tiên một trong các hàng đợi hoặc theo một số thứ tự được chấp nhận được khấu trừ từ dữ liệu (ví dụ: id thấp nhất trước)).
Xin lỗi vì câu trả lời dài và tôi hy vọng điều này sẽ giúp ích cho bạn :)
Nguồn
2011-10-07 06:53:01
Dường như tôi sẽ tự mình làm điều đó. Có rất nhiều vấn đề liên quan đến hiệu suất và chức năng. Nó sẽ không dễ dàng, mặc dù nó sẽ là thử thách;) – kokosing