LINUX.ORG.RU

История изменений

Исправление 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()) {}