LINUX.ORG.RU

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

Спасибо капитан, я это и написал в посте. Я спрашиваю, почему и как выйти из ситуации, не прибегая к atomic_int, что, по сути, гигантский костыль.

Dragon59 ★★
() автор топика
Последнее исправление: Dragon59 (всего исправлений: 1)

нешто там нет ничего подобного

comapareAndSet(true,false)

из явы?

сей метод позволяет же реализовать все остальные

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

Дык

Perform a compare/exchange operation in a loop, until it succeeds:

std::atomic<bool> flag(false);

bool oldValue = flag.load();
while (!flag.compare_exchange_weak(oldValue, !oldValue)) {}
Deleted
()
Ответ на: комментарий от Deleted

только коипрование этого кода «влоб» нмв приведет к зацикливанию, я уж не знаю как тама в этих ваших сях может compare_exchange_weak магией обладает 8)

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

Спасибо, работает. Только вот производительность в сравнении с atomic_char и =^ только ухудшилась.

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

дык это возможно из-за того что у тебя долго flag != oldValue (ну или потому что в сях это все очень тупое, яж на сях не пишу так шо не знаю)

перетащи flag.load() внутырь цикла может поможет

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

а мне вот что интересно - существуют ли механизмы тестирования таких операций? например реальная работа с одной переменной - она редка между двумя потоками, но случается и от этого спасает как раз std::atomic (сам их юзаю)

или самому тесты такие надо писать где без устали два потока пинают одну переменную?

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