NO
Представьте, что в списке всего 1 элемент, и ваши 2 потока пытались "одновременно" нажать и вывести.
Если у вас много элементов, то выталкивание элемента спереди вряд ли будет взаимодействовать с указателем назад, а нажатие элемента сзади вряд ли помешает переднему указателю, поэтому две операции / должны/ быть безопасным с точки зрения целостности списка.
Но ясно, что когда вы вытаскиваете последний элемент спереди, указатель назад также обновляется, говоря, что больше нет элементов, и когда вы нажимаетеэлемент сзади и список пуст, тогда передний указатель обновляется.Можете ли вы гарантировать порядок этих операций, чтобы они не мешали?У вас есть защита на случай, если размер равен нулю, но не на случай, если размер равен 1.
Другая вещь, которая меня беспокоит, заключается в том, что, поскольку c ++ 11 size () является «мгновенным» ответом O (0), а не сканирование O (n), и для этого списка ведется целое число.Если и push, и pop изменяют счетчик размера «одновременно», то они могут получить неправильное значение размера.Если внутренние элементы списка используют значение size в качестве проверки "is_empty ()", возможно, для оптимизации вставки в пустой список или извлечения последнего элемента, то они могут быть одурачены при выполнении неуместных операций.