Lý do chính để sử dụng nguyên tử trên mutexes, là mutexes đắt tiền nhưng với mô hình bộ nhớ mặc định cho atomics
là memory_order_seq_cst
, điều này không đắt như thế?Đồng bộ hóa với `std :: mutex` chậm hơn so với` std :: atomic (memory_order_seq_cst) `?
Câu hỏi: Có thể đồng thời một chương trình sử dụng khóa nhanh bằng chương trình không khóa đồng thời không?
Nếu có, có thể không đáng để thử trừ khi tôi muốn sử dụng memory_order_acq_rel
cho nguyên tử.
Edit: tôi có thể bị thiếu một cái gì đó nhưng không thể khóa dựa trên được nhanh hơn lock-free vì mỗi khóa sẽ phải là một rào cản bộ nhớ đầy đủ quá. Nhưng với khóa tự do, có thể sử dụng các kỹ thuật ít rào cản bộ nhớ hơn.
Vì vậy, quay lại câu hỏi của tôi, khóa không còn nhanh hơn khóa dựa trên tiêu chuẩn C++ 11 mới với mặc định memory_model
?
Có phải là "không có khóa" = khóa dựa trên khi được đo lường về hiệu suất "true? Giả sử 2 chủ đề phần cứng.
Chỉnh sửa 2: Câu hỏi của tôi không phải là về đảm bảo tiến độ, và có lẽ tôi đang sử dụng "lock-free" ra khỏi ngữ cảnh. Về cơ bản khi bạn có 2 chủ đề với bộ nhớ dùng chung, và sự đảm bảo duy nhất bạn cần là nếu một luồng được viết thì luồng khác không thể đọc hoặc viết, giả định của tôi là một thao tác đơn giản nguyên tử là hoạt động compare_and_swap
nhanh hơn khóa một mutex. Bởi vì nếu một sợi không bao giờ chạm vào bộ nhớ dùng chung, bạn sẽ kết thúc khóa và mở khóa liên tục mà không có lý do gì nhưng với các phép toán nguyên tử bạn chỉ sử dụng 1 chu kỳ CPU mỗi lần.
Liên quan đến nhận xét, khóa xoay và khóa mutex rất khác nhau khi có rất ít tranh chấp.
Vâng, có sự bảo đảm tiến độ khác nhau giữa các khóa, mã không có khóa và mã miễn phí. –
[Đọc bắt buộc] (http://www.1024cores.net/home/lock-free-algorithms). –
watch: https://www.youtube.com/watch?v=DCdGlxBbKU4 – NoSenseEtAl