2012-10-18 9 views
6

Brakuje mi bardzo dużo w nowym standardzie klasy szablonu std::shared_lock. W Boost.Thread istnieje boost::shared_lock, nawet boost::upgrade_lock istnieje.Jak wykonać shared_lock lub upgrade_lock w standardowym C++ 11?

Dlaczego tak jest, nie ma std :: shared_lock i std::unique_lock w C++ 11?
Jak to możliwe, aby uzyskać podobne zachowanie, jak boost::shared_lock, ale w czystym C++ 11?

Myślałem, aby użyć boost::shared_lock<std::mutex>, ale to nie ma tyle sensu, ponieważ std::mutex nie ma członka lock_shared(). A także, nie ma takich jak std::shared_mutex.

+0

Jeśli już używasz Boost, myślę, że nie ma sensu unikać 'boost :: shared_mutex' na rzecz' std :: mutex'. –

Odpowiedz

11

Propozycja Howarda dla std::shared_mutex została odrzucona dla C++ 11 z powodu braku czasu na jej rozważenie. Zaproponował to ponownie dla C++ 17 i jest to dyskutowane na spotkaniu w Portland w tym tygodniu.

W międzyczasie, jeśli możesz użyć Boost, możesz równie dobrze; nie będzie żadnej nowej funkcji, która byłaby standaryzowana.

To powiedziawszy, warto sprawdzić, czy używanie shared_mutex jest rzeczywiście korzystne - w wielu przypadkach nie zapewnia oczekiwanych przyrostów wydajności z powodu rywalizacji na samym muteksie.

+0

Dzięki za odpowiedź Anthony. Odkąd poszperałem i znalazłem tę dyskusję na temat propozycji Howarda: http://permalink.gmane.org/gmane.comp.lib.boost.devel/211180 –