Сломаться она не может так как в реализации предложенной мной нет метода pop() Безусловно при расширение надо учитывать то что вы описали и это отличное замечание! Реализация которую вы описали показана в академической части "Полное определение класса потокобезопасной очереди"
На самом деле реализация функции push осталась по причине использования данной очереди в задаче при которой требовалось повторенное использование С возможностью прерывания процесса обработки и его возобновлением Благодарю что обратили на это внимание В связи с тем что данная тема не охватывается в этой статье внесу правки в этом методе
Hardened_Steel Изучил более глубоко тему которую вы предоставили, действительно есть сценарий при котором у нас возможна ситуация при которой поток ожидающий данные будет ждать бесконечно В связи с этим внесу правки. Спасибо!
Так как тут используются атомарные операции, то за наличие необходимой синхронизации отвечает компилятор. Если компилятору не удалось определить очередность внесения изменений из разных потоков в переменную то он добавит в процесс изменения встроенный мьютекс.
Для проверки наличия lock-free изменения можно воспользоваться макросами:(приведу в пример не все) ATOMIC_BOOL_LOCK_FREE
Сломаться она не может так как в реализации предложенной мной нет метода pop()
Безусловно при расширение надо учитывать то что вы описали и это отличное замечание!
Реализация которую вы описали показана в академической части "Полное определение класса потокобезопасной очереди"
На самом деле реализация функции push осталась по причине использования данной очереди в задаче при которой требовалось повторенное использование
С возможностью прерывания процесса обработки и его возобновлением
Благодарю что обратили на это внимание
В связи с тем что данная тема не охватывается в этой статье внесу правки в этом методе
Hardened_Steel Изучил более глубоко тему которую вы предоставили, действительно есть сценарий при котором у нас возможна ситуация при которой поток ожидающий данные будет ждать бесконечно
В связи с этим внесу правки. Спасибо!
Так как тут используются атомарные операции, то за наличие необходимой синхронизации отвечает компилятор. Если компилятору не удалось определить очередность внесения изменений из разных потоков в переменную то он добавит в процесс изменения встроенный мьютекс.
Для проверки наличия lock-free изменения можно воспользоваться макросами:(приведу в пример не все)
ATOMIC_BOOL_LOCK_FREE
ATOMIC_CHAR_LOCK_FREE