Trong Blog Herb Sutter mình viếtGiảm phân tử nguyên tử có đắt hơn gia tăng không?
[...] vì incrementing tính tham khảo con trỏ thông minh thường có thể được tối ưu hóa để được giống như một tăng bình thường trong một tối ưu hóa
shared_ptr
thực hiện - chỉ cần một tăng thông thường hướng dẫn, và không có hàng rào, trong mã được tạo.Tuy nhiên, sự sụt phải là sụt lần nguyên tử hoặc tương đương, mà tạo ra hướng dẫn xử lý bộ nhớ đặc biệt mà đắt hơn trong bản thân, và rằng trên đó gây ức hàng rào hạn chế đối với việc tối ưu hóa mã xung quanh.
Văn bản giới thiệu về việc triển khai shared_ptr
và tôi không chắc liệu nhận xét của anh chỉ áp dụng cho trường hợp này hay thông thường. Từ công thức của mình, tôi thu thập nó là thường là.
Nhưng khi nghĩ về điều đó tôi chỉ có thể nghĩ đến "giảm giá đắt hơn" khi số if(counter==0)
ngay sau đó - có thể là trường hợp với shared_ptr
.
Vì vậy, tôi tự hỏi nếu nguyên tử hoạt động ++counter
là (thường) luôn nhanh hơn hơn --counter
, hay chỉ vì nó được sử dụng if(--counter==0)...
với shared_ptr
?
* "Từ công thức của mình, tôi thu thập nó thường là" * - Tôi thu thập ngược lại, mặc dù. –
Bạn cũng có thể muốn xem xét hàng rào WriteRead được yêu cầu cho --counter == 0 và thường là giá trị đắt nhất, cũng như loại rào chắn duy nhất yêu cầu phải sau khi ghi dữ liệu phải được đọc lại đảm bảo đồng bộ hóa giữa các lõi. Đối với truy cập ++ bạn chỉ cần viết mà không cần yêu cầu ngay lập tức để có được trạng thái đồng bộ của giá trị này hoặc dữ liệu khác. –