Я на перекрестке, я пытаюсь выбрать между структурой данных на основе блокировки мьютекса и структурой данных без блокировки (и, возможно, без ожидания).
Копаясь немного глубже, я не нашел ни слова о том, поддерживает ли стандарт С++ 11 операции без блокировки для атомарных типов, даже для основанных на ширине интегралов, таких как atomic_uint32_t
. Другими словами, это не просто интерфейс std::atomic<>
который не предоставляется без блокировки; единственное, что выглядит так, как будто во всей стандартной библиотеке предоставлено отсутствие блокировки, - это std::atomic_flag
.
Это правда или я что-то упустил? В чем причина этого? Я имею в виду, что стандарт называет "атомарным" что-то, что явно не блокируется без каких-либо блокировок, и это то, что даже позволяет использовать мьютексы или блокировать вызовы под капотом.