2012-01-23 36 views
10

Tôi có một vấn đề hiểu tại sao shared_ptr đang sử dụng hướng dẫn cpu nguyên tử ... Tôi không thể tìm ra lý do vì nó không phải là chủ đề an toàn. Ai đó có thể giải thích. Nếu bạn tự hỏi làm thế nào tôi biết rằng nó sử dụng intstuructions nguyên tử: có một clip từ C + + và xa hơn nơi Herb và Andrei nói về nó, nhưng họ không bao giờ đề cập đến lý do tại sao nó như thế.lý do tại sao là std :: shared_ptr sử dụng các hoạt động cpu nguyên tử

Trả lời

15

Bất kỳ phiên bản nào của shared_ptr đều là an toàn đa luồng. Dữ liệu mà nó trỏ đến không phải là an toàn đa luồng. Xem this.

Hướng dẫn nguyên tử, nếu được áp dụng đúng cách (bảo vệ được thực hiện theo cùng thứ tự bằng cách truy cập chuỗi cạnh tranh) là một cách để thực hiện an toàn luồng. Một cách khác là sử dụng mutexes.

Xem một câu hỏi tương tự cho BOOST: Is boost shared_ptr xxx thread safe?

+6

Để cụ thể hơn: số lượng tham chiếu được chia sẻ bên trong 'shared_ptr' có thể được truy cập bởi nhiều luồng. Đó là lý do tại sao nó cần thiết để tăng/giảm nó một cách nguyên tử. –

2

Herb Sutter chỉ được sử dụng shared_ptr như một ví dụ ngơi thoải mái tại gotw ông 95, ông đi đó để xây dựng trên quyết định thiết kế:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. (Và tôi quá lười để thực hiện công việc) – johnchen902

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