Ví dụ, hãy xem xét std :: map được triển khai với cây Splay. Loại cấu trúc cây này có thể thay đổi và thay đổi mỗi khi bản đồ được truy cập để đọc. Khi bản đồ là const, ai phải garantuee sự cô lập của các bài đọc đồng thời, là nó lên đến mã người dùng hoặc để thực hiện bản đồ?Đồng thời với const std :: T's
Trả lời
Các người hỏi biết rằng nếu bạn có chủ đề mà viết thư cho một bộ sưu tập, người dùng phải quản lý khóa đồng bộ.
Câu hỏi có vẻ là liệu tiêu chuẩn có thể đảm bảo an toàn luồng nếu các chuỗi mô phỏng chỉ đọc bộ sưu tập.
Tôi không chắc chắn rằng các tiêu chuẩn C++ cũ có bất kỳ sự bảo đảm nào về an toàn luồng với bất kỳ hoạt động nào, nhưng cái mới sẽ (phần được đưa ra trong các chú thích, 23.2.2). Vì nó là, hầu hết các nhà cung cấp bây giờ đảm bảo thread-an toàn giữa các lần đọc đồng thời, mặc dù thực tế rằng các concurrency trong các đối tượng chứa trong bộ sưu tập rõ ràng là cần phải được xử lý bởi người dùng.
Trong cùng một cách, bạn sẽ có thể sử dụng khóa ghi đọc trên bộ sưu tập STL.
Đây là những câu hỏi liên quan về stack overflow:
std::*
không đảm bảo an toàn cho bất kỳ chủ đề nào.
Trên thực tế, phần 23.2.2 của C++ 11 xác định cuộc đua dữ liệu đảm bảo về các thùng chứa tiêu chuẩn. –
ok, ý tôi là C++ 03 – triclosan
đọc chủ đề dưới đây:
có vẻ tương tự với tôi với những gì bạn đang hỏi:
- 1. std :: remove_const với tham chiếu const
- 2. toán tử std :: string() const?
- 3. Chuyển đổi từ const char * để std :: string const &
- 4. Đồng thời sử dụng std :: regex, hành vi được xác định?
- 5. Đồng bộ hóa với `std :: mutex` chậm hơn so với` std :: atomic (memory_order_seq_cst) `?
- 6. std :: set iterator tự động const
- 7. Hợp nhất các tệp dịch (.ts) với các tệp .ts hiện có bằng QT Utilities (lconvert)
- 8. Viết đồng thời với sqlite3
- 9. Gstreamer - vaapidecode với mpeg ts không phát
- 10. Vấn đề đồng thời với AppFabric Cache?
- 11. Tạm thời std :: strings return junk
- 12. Tham chiếu Const đến tạm thời
- 13. thay đổi tham chiếu của const std :: tham chiếu chuỗi
- 14. MPEG-TS Encoding
- 15. mảng const tạm thời không liên kết với tài liệu tham khảo rvalue
- 16. Bind tạm thời để tham chiếu không const
- 17. Thử nghiệm đồng thời luồng với Spock
- 18. Giải phương trình đồng thời với R
- 19. Tham chiếu Const trong std :: các phần tử vector
- 20. C++ const std :: tham chiếu bản đồ không biên dịch
- 21. Làm cách nào để khởi tạo một const std :: pair?
- 22. return iterator từ std :: set :: insert() là const?
- 23. Quay trở lại std :: chuỗi như tham chiếu const
- 24. Vấn đề với std :: bản đồ và std :: cặp
- 25. NHibernate & WCF: Hiệu suất (sử dụng lại phiên) so với đồng thời (yêu cầu đồng thời)
- 26. temporaries Tránh trong std :: bản đồ/std :: tra cứu unordered_map với std :: string key
- 27. Compile std :: regex_iterator với gcc
- 28. boost :: asio :: deadline_timer với std :: giá trị thời gian chrono
- 29. Gọi lại không đồng bộ đồng thời
- 30. Ngôn ngữ đồng thời
Tôi không nghĩ rằng tiêu chuẩn làm cho bất kỳ tuyên bố về đồng thời của container. –
@OliCharlesworth: Điều đó cũng đúng với C++ 11? –
đây là loại trùng lặp của câu hỏi này: http://stackoverflow.com/questions/1846186/thread-safety-of-stdmap-for-read-only-operations – CashCow