Trong thời gian chạy đồng thời được giới thiệu trong VS2010, có một lớp concurrent_queue. Nó có hàm try_pop() không bị chặn.
Tương tự trong Intel Building Building Blocks (TBB), lệnh chặn pop() đã bị xóa khi chuyển từ phiên bản 2.1 sang 2.2.tại sao concurrent_queue không chặn?
Tôi tự hỏi có vấn đề gì với cuộc gọi chặn. Tại sao nó bị xóa khỏi TBB? Và tại sao không có concurrent_queue chặn?
Tôi đang ở trong tình huống mà tôi cần một hàng đợi đồng thời chặn và tôi không muốn một sự chờ đợi bận rộn. Ngoài việc tự viết một hàng đợi, có khả năng nào khác trong thời gian chạy đồng thời không?
Với chặn 'pop', bạn có thể thực hiện * * "cổ điển sản xuất-tiêu dùng" sử dụng TBB trong khoảng hai dòng mã, mà không cần phải viết bất kỳ nguyên thủy đồng bộ hóa chính mình. (Người tiêu dùng có 'trong khi (đúng) tiêu thụ (Q.pop());' và nhà sản xuất làm 'trong khi (đúng) Q.push (produce()); '.) Nếu không có một' pop' chặn, cùng một vấn đề yêu cầu ít nhất hai lần nhiều mã: cụ thể là, lưu giữ sổ sách biến số điều kiện bổ sung trên mỗi hàng đợi. Nhưng như paxdiablo nói, 'tbb :: concurrent_bounded_queue' tiếp tục cung cấp chức năng chặn' pop', và về cơ bản là một thay thế thả cho 'concurrent_queue'. – Quuxplusone