2016-10-23 27 views
15

C++ 11 giới thiệu std::mutex và phiên bản mở rộng của nó - std::timed_mutex.Tại sao shared_timed_mutex được định nghĩa trong C++ 14, nhưng shared_mutex trong C++ 17?

Tuy nhiên, trong C++ 14 chúng tôi có std::shared_timed_mutex, nhưng 'parent' của nó, std::shared_mutex sẽ được thêm vào C++ 17.

Có giải thích hợp lý nào cho điều đó không?

Nếu tôi không sử dụng chức năng 'hẹn giờ' của std::shared_timed_mutex, điều đó sẽ tồi tệ hơn (chậm hơn, tiêu thụ nhiều tài nguyên hơn) được đề xuất std::shared_mutex?

Trả lời

18

Mutex được chia sẻ ban đầu có thời gian trong đó và được gọi là shared_mutex.

Một người triển khai (msvc iirc) lưu ý rằng họ có thể triển khai "rẻ hơn" mà không cần thời gian. Đặc biệt, SRWLOCK là một nguyên thủy hiện có trên các cửa sổ đủ để triển khai thực hiện chia sẻ mutex, nhưng thời gian yêu cầu thêm máy móc. (Qua @ t.c.). (Tuy nhiên, tôi tin rằng nó không chỉ là dễ dàng hơn vì đã được viết, nhưng về cơ bản cũng đắt hơn, ít nhất là trên cửa sổ x86/64)

Đã quá muộn để thêm loại mới vào tiêu chuẩn, nhưng không quá muộn để đổi tên nó.

Vì vậy, nó đã được đổi tên thành shared_timed_mutex và phiên bản chưa được thêm vào được thêm vào tiêu chuẩn tiếp theo.

Here là ít nhất một trong các giấy tờ liên quan đến việc đổi tên.

Chúng tôi đề nghị đổi tên shared_mutex để shared_timed_mutex:

(a) cho phù hợp với mutexes khác (sửa chữa đặt tên nhất quán);

(b) để rời khỏi phòng cho shared_mutex có thể hiệu quả hơn trên một số nền tảng hơn shared_timed_mutex.

+4

@MartinBonner Không, 'CRITICAL_SECTION' không phải là một mutex được chia sẻ (còn gọi là khóa đọc/ghi). 'SRWLOCK' là nguyên thủy. –

+0

Oh chết tiệt! Tôi đã nhầm lẫn giữa "chia sẻ" và "đệ quy"! –

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