LINUX.ORG.RU

Насколько bool thread-safe

 ,


2

4
class BlaBla
{
public:
    BlaBla() :
        mbValue(false)
    {}

    bool value() const {
        return mbValue;

    void compute(...) {
        mbValue = true / false;
    }

private:
    bool mbValue;
};

Опустим здесь подробности расчёта. Интересен только bool, насколько он thread-safe здесь?

★★★★★
Ответ на: комментарий от mv

говнокодили, говнокодят и будут говнокодить

модель памяти – это для учёных, ботанов и прочих яйцеголовых. чтобы далеко за примером не ходить, некто мистер торвальдс тоже заводил баги на жцц по поводу того, что его volatile как блокировка не работает. тот ещё говнокодер.

anonymous
()
Ответ на: комментарий от anonymous

Теперь можно распечатать и бить по голове тех, кто не читал и вопросы задаёт :)

mv ★★★★★
()
Ответ на: комментарий от UVV

Чего ты хочешь добиться? UB? Иначе пиши атомики.

invy ★★★★★
()

не thread-safe: C/C++ не задумывались как thread-safe from ground up. по сему, любые, даже приметивные переменные, должны быть залочены

anonymous
()
Ответ на: комментарий от fsb4000

Для примитивов да, нет смысла использовать volatile, когда есть Atomic*. Но volatile используется не только для примитивов, чтобы гарантировать happens-before.

ma1uta ★★★
()
Ответ на: комментарий от andreyu

Попробуй сравнить с таким вариантом ;):

void bar(int val) {
  int localVal = val;
  for (int i = 0; i < localVal; i++) {
    ...
  }
}

На примитивах, конечно, это не будет так заметно.

ma1uta ★★★
()
Ответ на: комментарий от anonymous

дочитаешь – возвращайся. попросишь тогда этот позорный топик снести.

Зачем? Разве стыдно признать, что ты чего-то не знаешь? Откуда этот насаживаемый комплекс и хорошо ли тебе с ним живётся?

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Зачем?

это будет проще объяснить когда дочитаешь

anonymous
()
Ответ на: чтобы гарантировать happens-before от anonymous

Тут произошло небольшое недоумение. Топик про c++, в сообщении говорилось про java, я отвечал про java. А сейчас вернулись опять в c++. В следующий раз буду уточнять.

ma1uta ★★★
()
Ответ на: комментарий от ma1uta

Попробуй сравнить с таким вариантом ;):

В этом примере val и localVal - локальные. В чем смысл примера?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Если бы «если mbValue является членом класса, то никакого кеширования не будет» было истинным, то компилятор не имел бы права оптимизировать цикл. Но цикл оптимизируется.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.