2012-03-07 27 views
5

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

+1

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. –

+0

@OliCharlesworth: Điều đó cũng đúng với C++ 11? –

+0

đâ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

Trả lời

4

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:

Thread safety of std::map for read-only operations

Is the C++ std::set thread-safe?

-1

std::* không đảm bảo an toàn cho bất kỳ chủ đề nào.

+0

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. –

+0

ok, ý tôi là C++ 03 – triclosan

Các vấn đề liên quan