История изменений
Исправление fsb4000, (текущая версия) :
Да, всё можно исправить.
Не знаю почему не видит emplace, возможно не указан стандарт? попробуй добавить в флаги компиляции -std=c++11
По поводу -Werror=reorder, то это легко. Нужно лишь инициализировать переменные в том порядке в конструкторе, в котором они перечислены в классе.
То есть заменить такие строчки
contention_free_shared_mutex() :
shared_locks_array_ptr(std::make_shared<array_slock_t>()), shared_locks_array(*shared_locks_array_ptr), want_x_lock(false), recursive_xlock_count(0),
owner_thread_id(thread_id_t()) {}
contention_free_shared_mutex() :
want_x_lock(false), shared_locks_array_ptr(std::make_shared<array_slock_t>()), shared_locks_array(*shared_locks_array_ptr), recursive_xlock_count(0),
owner_thread_id(thread_id_t()) {}
Код с habr у меня собрался, если использовать указатели...
Исходная версия fsb4000, :
Да, всё можно исправить.
Не знаю почему не видит emplace, возможно не указан стандарт? попробуй добавить в флаги компиляции -std=c++11
По поводу -Werror=reorder, то это легко. Нужно лишь инициализировать переменные в том порядке в конструкторе, в котором они перечислены в классе.
То есть заменить такие строчки
contention_free_shared_mutex() :
shared_locks_array_ptr(std::make_shared<array_slock_t>()), shared_locks_array(*shared_locks_array_ptr), want_x_lock(false), recursive_xlock_count(0),
owner_thread_id(thread_id_t()) {}
contention_free_shared_mutex() :
want_x_lock(false), shared_locks_array_ptr(std::make_shared<array_slock_t>()), shared_locks_array(*shared_locks_array_ptr), recursive_xlock_count(0),
owner_thread_id(thread_id_t()) {}