Ориентированная на многопотоковое исполнение одноэлементная реализация в C++

Как отмечалось в в этой публикации группы новостей , существует несколько причин, по которым использование alloca можно считать трудным и опасным:

  • Не все компиляторы поддерживают alloca.
  • Некоторые компиляторы по-разному интерпретируют предполагаемое поведение alloca, поэтому переносимость не гарантируется даже между компиляторами, которые его поддерживают.
  • Некоторые реализации содержат ошибки.

12
задан Ankur 27 June 2009 в 12:02
поделиться

2 ответа

Нет, это не потокобезопасно, потому что статический локальный компьютер никоим образом не защищен. По умолчанию статический локальный не является потокобезопасным. Это означает, что вы можете столкнуться со следующими проблемами

  • Конструктор для синглтона запускается более одного раза
  • Не гарантируется, что назначение статическому элементу будет атомарным, поэтому вы можете увидеть частичное назначение в многопоточных сценариях
  • Вероятно еще несколько, что мне не хватает.

Вот подробная запись в блоге Раймонда Чена о том, почему статика C ++ не является потокобезопасной по умолчанию.

13
ответ дан 2 December 2019 в 21:04
поделиться

Это не потокобезопасно, если вы не настроите свой компилятор для генерации потоковобезопасного кода для статического доступа.

Однако лучше, чтобы код был самодостаточным, поэтому я бы добавил здесь мьютекс и там.

0
ответ дан 2 December 2019 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: