Tôi đang cố gắng để thực hiện đoạn mã sau vào một kịch bản đa luồng:Nhiều-độc giả, ổ khóa đơn nhà văn trong Boost
Get shared access to mutex
Read data structure
If necessary:
Get exclusive access to mutex
Update data structure
Release exclusive lock
Release shared lock
đề Boost có một lớp shared_mutex
được thiết kế cho một nhiều độc giả, độc thân mô hình viết. Có một số câu hỏi stackoverflow liên quan đến lớp này. Tuy nhiên, tôi không chắc chắn nó phù hợp với kịch bản ở trên, nơi bất kỳ trình đọc nào có thể trở thành một người viết. Các tài liệu khẳng định:
Khái niệm UpgradeLockable là một sàng lọc của khái niệm SharedLockable cho phép quyền sở hữu nâng cấp cũng như chia sẻ quyền sở hữu và sở hữu độc quyền. Đây là một phần mở rộng đến nhiều-reader/ mô hình đơn ghi được cung cấp bởi các khái niệm SharedLockable : a đơn chủ đề có thể có quyền sở hữu upgradable cùng một lúc như những người khác đã chia sẻ sở hữu.
Từ chữ "đơn" Tôi nghi ngờ rằng chỉ một chuỗi có thể giữ khóa nâng cấp. Những người khác chỉ giữ một khóa chia sẻ mà không thể được nâng cấp lên khóa độc quyền.
Bạn có biết liệu boost::shared_lock
có hữu ích trong trường hợp này không (bất kỳ người đọc nào có thể trở thành người viết) hoặc nếu có cách nào khác để đạt được điều này?
Định nghĩa của bạn là 'quyền truy cập độc quyền' nếu không phải chỉ có một chủ đề có thể giữ khóa tại một thời điểm '? hoặc bạn đang bối rối 'một luồng tại một thời điểm' với 'một chuỗi cụ thể được chọn trước'? –
@Pete: Tôi muốn một sợi (* không * được chọn trước) để giữ khóa độc quyền. – Amnon