Tôi đang sử dụng hàng đợi để giao tiếp giữa các chuỗi. Tôi có một người đọc và nhiều chủ đề của người viết. Câu hỏi của tôi là tôi cần phải khóa hàng đợi mỗi khi tôi sử dụng push/front/pop từ hàng đợi cho người đọc? Tôi có thể làm một cái gì đó như sau:An toàn chủ đề cho hàng đợi STL
//reader threads
getLock();
get the number of elements from the queue
releaseLock();
int i = 0;
while(i < numOfElements){
queue.front();
queue.pop();
i++
}
Ý tưởng là tôi muốn giảm bớt chi tiết của mã khóa và từ thread nhà văn sẽ chỉ viết vào mặt sau của hàng đợi và chỉ có một đầu đọc đơn chủ đề. Miễn là tôi nhận được số lượng các phần tử, sau đó tôi có thể lấy các phần tử từ hàng đợi HOẶC tôi có cần phải kèm theo số front()
và pop()
trong khóa không?
C++ 0x có Atomics, vì vậy nó cho phép các lập trình viên để viết lock-free (thread-an toàn) các thuật toán, và cung cấp mutex tiêu chuẩn, nhưng nó không có bất cứ điều gì out-of-the-box. – GManNickG