Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Есть ли здесь UB?

08.08.2021, 15:15. Показов 1567. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef LFREESTACK
#define LFREESTACK
 
#include <atomic>
#include <memory>
#include <thread>
 
template<typename T>
class lfreestack{
    private:
        std::atomic<uint32_t> counter;
        struct node{
            std::shared_ptr<T> data;
            node * next;
            node(const T& data_):
                data(std::make_shared<T>(data_)),
                next(nullptr)
            {}
        };
 
        std::atomic<node*> head;
    public:
        void push(const T& data){
            node * newNode = new node{data};
            newNode->next = head.load();
            while(!head.compare_exchange_weak(newNode->next, newNode));
        }
 
        std::shared_ptr<T> pop(){
            node * oldHead = head.load();
            std::this_thread::sleep_for(std::chrono::seconds(++counter));
            while(oldHead && !head.compare_exchange_weak(oldHead, oldHead->next));
            std::shared_ptr<T> res;
            if(oldHead){
                res = oldHead->data;
                delete oldHead;
            }
            return res;
        }
};
 
#endif
Есть ли в pop() UB? Если первый поток дойдет до удаления oldHead, который так же есть во втором потоке который ждет в std::thread::sleep_for, а второй попытается получить oldHead->next то это же UB?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2021, 15:15
Ответы с готовыми решениями:

А есть ли здесь разработчики под SymbianOS (С++)?
Просто накопилось много вопросов, стоит ли их здесь задавать? на других форумах(рус.) посвященных Symbian не такого живого обсуждение. :)

Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено.
Доброе утро! Я начинаю только осваивать программирование.Читаю - решаю задачи - пытаюсь разбираться в ошибках. Написал программу с...

Здесь есть какие нибудь ошибки ? и как здесь получается в ответе 6.25?
program r2; var b:real; begin b:=100; repeat b:=b/2; until b&lt;10; writeln (b:0:2); end. Здесь есть какие нибудь ошибки ?...

1
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
09.08.2021, 00:17
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

В С++11 использование значения указателя после освобождение памяти действительно приведёт к неопределённому поведению. Хотел ещё проверить С++20, но там не нашёл такого примечания. Возможно где-то в другом месте запрятано.
В любом случае, вы уже освободили память и с того момента могли уже занять её под что-нибудь другое, так что проблемы при таком разыменовывании точно будут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2021, 00:17
Помогаю со студенческими работами здесь

Есть здесь переводчики?
Люди добрые, помогите. Basic знаю, С++ более-менее, а вот с Pascal совсем не дружу. Вот элемент кода на нем, дико интересно узнать, как это...

Есть здесь ошибка?
&lt;img src=&quot;&lt;?php bloginfo('template_directory'); ?&gt;/timthumb.php?src=&lt;?php echo $postimageurl; ?&gt; Когда убираю апострафы...

Есть ли здесь ошибка?
Нужно найти действительную и мнимую часть. Решал так, но в итоге задание оказалось не зачтено....

Есть ли здесь утечка памяти?
Вот код: -(NSString *)getCookie { NSMutableURLRequest *cookieRequest = ]; ; NSHTTPURLResponse *response = nil;...

Здесь есть знатоки Делфи???=)
Помогите написать тест-програму на Делфи 7:gscratch:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru