Tôi có ứng dụng đa luồng và tài nguyên được chia sẻ std::map<KeyType, ElementType>
. Tôi sử dụng một mutex để bảo vệ chèn, lấy và loại bỏ.Có thể tham chiếu đến phần tử bên trong std :: map bị vô hiệu không?
Phương thức nhận của tôi trả về tham chiếu đến phần tử được lưu trữ (mở khóa khi trả về), sau đó tôi thực hiện một số thao tác với phần tử đó.
Câu hỏi: Có thể rằng khi làm việc với các tài liệu tham khảo yếu tố lưu trữ, thread khác có thể thay đổi std::map
nên nguyên tố này sẽ được chuyển đến một địa chỉ khác nhau và các tài liệu tham khảo sẽ không còn giá trị? (Tôi biết có một số triển khai ADT nhất định làm sắp xếp lại ADT về thay đổi kích thước).
Bạn chặn phương pháp của mình ở đâu? bên trong, hoặc gói chúng với mutex? –
Khác với việc xóa phần tử bạn làm việc, nó không thể làm mất hiệu lực. – StoryTeller
Điều này cũng không phải là vấn đề trong môi trường đa luồng không? Ví dụ. bạn lấy một tham chiếu từ bản đồ của bạn và lưu trữ nó ở đâu đó, sau đó nếu bạn thay đổi bản đồ, tham chiếu được lưu trữ trước đó cũng có thể bị vô hiệu. –