Pull to refresh
8K+
10
24
Rating
Send message

Сломаться она не может так как в реализации предложенной мной нет метода pop()
Безусловно при расширение надо учитывать то что вы описали и это отличное замечание!
Реализация которую вы описали показана в академической части "Полное определение класса потокобезопасной очереди"

На самом деле реализация функции push осталась по причине использования данной очереди в задаче при которой требовалось повторенное использование
С возможностью прерывания процесса обработки и его возобновлением
Благодарю что обратили на это внимание
В связи с тем что данная тема не охватывается в этой статье внесу правки в этом методе

Hardened_Steel Изучил более глубоко тему которую вы предоставили, действительно есть сценарий при котором у нас возможна ситуация при которой поток ожидающий данные будет ждать бесконечно
В связи с этим внесу правки. Спасибо!

Так как тут используются атомарные операции, то за наличие необходимой синхронизации отвечает компилятор. Если компилятору не удалось определить очередность внесения изменений из разных потоков в переменную то он добавит в процесс изменения встроенный мьютекс.

Для проверки наличия lock-free изменения можно воспользоваться макросами:(приведу в пример не все)
ATOMIC_BOOL_LOCK_FREE

ATOMIC_CHAR_LOCK_FREE

Information

Rating
377-th
Works in
Registered
Activity