Tôi đã đọc nhiều câu hỏi xem xét khóa kiểm tra an toàn hai luồng (đối với người độc thân hoặc người lười biếng). Trong một số chủ đề, câu trả lời là mô hình hoàn toàn bị hỏng, những người khác đề xuất một giải pháp.C++ 11: Khóa kiểm tra an toàn kép để khởi tạo lười. Khả thi?
Vì vậy, câu hỏi của tôi là: Có cách nào để viết một mẫu khóa kiểm tra kép được kiểm tra toàn bộ chuỗi trong C++ không? Nếu vậy, nó trông như thế nào.
Chúng tôi có thể giả sử C++ 11, nếu điều đó giúp mọi thứ trở nên dễ dàng hơn. Theo như tôi biết, C++ 11 cải thiện mô hình bộ nhớ có thể mang lại những cải tiến cần thiết.
Tôi biết rằng điều đó có thể xảy ra trong Java bằng cách làm cho biến kiểm tra bảo vệ kép dễ bay hơi. Vì C++ 11 mượn các phần lớn của mô hình bộ nhớ từ một trong Java, nên tôi nghĩ nó có thể là có thể, nhưng làm thế nào?
Nếu bạn có thể sử dụng C++ 11, hãy bỏ qua toàn bộ doanh nghiệp khóa đã chọn và sử dụng biến cục bộ tĩnh hoặc 'std :: call_once'. –
Những người dân địa phương tĩnh có được khởi tạo lười biếng không? Và về 'call_once': Làm thế nào để đảm bảo rằng cuộc gọi một lần sẽ không viết tham chiếu không được tạo hoàn toàn cho biến? – gexicide
có, người dân địa phương tĩnh được khởi tạo lười biếng theo cách an toàn chỉ. Và 'call_once' đảm bảo chủ đề chỉ được gọi một lần; và rằng không có lệnh gọi nào khác để trả về 'call_once' trước một lệnh thực thi hàm trả về (bạn có thể đọc thêm tại đây http://en.cppreference.com/w/cpp/thread/call_once). Nó hoạt động như thế nào. Hai điều này về cơ bản tồn tại, do đó bạn không muốn bận tâm với việc viết thêm
lỗiviệc kiểm tra khóa được kiểm tra kép. –