Tiêu chuẩn cho biết: "Một đối tượng của loại chuỗi :: id cung cấp ... một giá trị riêng biệt duy nhất cho tất cả các đối tượng chuỗi không đại diện cho một chuỗi thực thi". Đó có phải là giá trị đơn/riêng biệt liên quan đến operator==
hay là giá trị bit/đơn lẻ thực tế?Yêu cầu đối với std :: thread :: id. Nó có thể được phun không?
Lý do cho câu hỏi: std::thread::id::id()
của MSVC2012 để rác trong một trong các trường của nó và mã ngắt mã so sánh trên std::atomic<std::thread::id>
(vì sau này phụ thuộc vào so sánh bitwise).
Có phải là std::atomic<std::thread::id>
một cấu trúc pháp lý ngay từ đầu không?
EDIT: cho tài liệu tham khảo, các mã đi như thế này:
while(!worker_id.compare_exchange_weak(no_id = thread_id_type(), self_id))
sleep();
Cảm ơn bạn.Chọn lọc đặt lại 'no_id' là một mẹo hay, bây giờ tôi bắt đầu tự hỏi tại sao tôi không thấy nó :) – vpozdyayev
Nhưng bạn có thể chỉ muốn gọi ngủ nếu" no_id! = Std :: thread :: id() " trong vòng. – cmeerw
@cmeerw Vâng --- Tôi đã cố gắng sao chép vòng lặp của vpozdyayev càng chặt chẽ càng tốt. Nếu 'compare_exchange_weak' thất bại" giả "thì bạn trong hầu hết các trường hợp bạn muốn lặp lại ngay lập tức, mà không cần chờ đợi. –