Задать вопрос
@communistic_sistema
Биохимик, но в программировании немного шарю

Как ждать в диапазоне атомарных чисел?

Я хочу сделать аналог std::mutex, но немного с другим функционалом.
Суть заключается в том, что функтор-владелец может вызовом оператора инкрементировать и декрементировать атомарный size_t (начал исполнение - увеличил, заканчиваешь - уменьшил), а сторонние функции могли работать только когда значение (допустим) =0. Для атомарных чисел есть wait функция, которая заставляет ждать поток, пока не вызван notify. Проблема wait в том, что оно будет ждать только (допустим) при 0, а мне нужно ждать в диапазоне [1;-1]. Как такое можно реализовать?
Я пробовал делать так:
while(my_atomic_int.load() != 0) my_atomic_int.wait(my_atomic_int.load());

Но я так понимаю - оно не потокобезопасно из-за цикла и != 0.
  • Вопрос задан
  • 42 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
То, что вы описали в комментариях, это буквально блокировка чтения-записи. Функтор читает данные и может выполнятся параллельно несколько раз, но запись может быть только одна и она блокирует все чтения. Решение описано в википедии: 2 мьютекса, один счетчик. Атомиков не надо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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