я не знаю ни одного, самый близкий из которых состоит из потоковых блоков, которые имеют concurrent_unordered_map
Контейнеры STL позволяют одновременный доступ к чтению из нескольких потоков , если вы не выполняете параллельное изменение. Часто нет необходимости повторять при добавлении / удалении.
Руководство по предоставлению простого класса-оболочки является разумным, я бы начал с чего-то вроде приведенного ниже фрагмента кода, защищающего методы, к которым вам действительно нужен параллельный доступ, и затем обеспечивающего «небезопасный» доступ к базовому std :: set, чтобы люди можете выбрать другие методы, которые не являются безопасными. При необходимости вы также можете защитить доступ к получению итераторов и их возврату, но это довольно сложно (тем не менее, это меньше, чем написание собственного свободного блокировочного набора или собственного полностью синхронизированного набора).
Я работаю над библиотекой параллельных шаблонов, поэтому я использую критическое_сечение из VS2010 beta boost :: mutex тоже отлично работает, и шаблон RAII использования lock_guard почти необходим независимо от того, как вы решите это сделать:
template <class T>
class synchronized_set
{
//boost::mutex is good here too
critical_section cs;
public:
typedef set<T> std_set_type;
set<T> unsafe_set;
bool try_insert(...)
{
//boost has a lock_guard
lock_guard<critical_section> guard(cs);
}
};