170 похожих чатов

Уважаемые знатоки! Внимание, вопрос! Допустим, в каком-то потоке была создана

переменная типа умный указатель вот таким образом:
static thread_local std::shared_ptr<some_type> tls;
Затем, так получилось, что эта же переменная (shared_ptr, count() == 2) используется в другом потоке. Теперь, выполнение потока, в котором была создана переменная shared_ptr, завершено (count() == 1). Является ли неопределённым поведением использование этой переменной потоком, который её не создавал?

13 ответов

38 просмотров

ты не можешь использовать переменную tls в другом потоке, поскольку она создается на поток, а объект можешь, если сможешь его получить

Все валидно вроде

Ian-Mcewan Автор вопроса
Anatoly Shirokov
ты не можешь использовать переменную tls в другом ...

не могу сделать так? std::weak_ptr<type> global; void foo() { static thread_local std::shared_ptr<type> tls; if (!tls) { tls=std::make_shared<type>(); global=tls; } // use } void bar() { if (global) auto tmp=global.lock(); // use }

Ian-Mcewan Автор вопроса

валидно ли использование shared_ptr когда она пережила создавший её поток?

Ian Mcewan
валидно ли использование shared_ptr когда она пере...

самого шарадптра - нет, а вот контрольного блока и T - вполне

Ian-Mcewan Автор вопроса
Aleksander Spichak
самого шарадптра - нет, а вот контрольного блока и...

shared_ptr конечно не тот что в потоке ибо для доступа используется weak_ptr

Ian Mcewan
не могу сделать так? std::weak_ptr<type> global; ...

надо так проверку организовывать валидности объекта: if( auto p = global.lock() ) { // use p }

Ian-Mcewan Автор вопроса
Anatoly Shirokov
надо так проверку организовывать валидности объект...

Да, согласен. Интересовала допустимость концепта

Ian-Mcewan Автор вопроса
Ian Mcewan
Благодарю

только смотри, если кто-то напишет: std::shared_ptr<...> global2; ... if( auto p = global.lock() ) global2 = p; то твой shared будет валиден и после смерти потока. ну и еще пять копеек: shared_ptr тяжелый объект в плане сихронизации доступа. TLS же используют как раз для того чтобы уйти от примитивов синхронизации и т.п. поэтому вызывает вопрос вся идея с shared_ptr

Ian-Mcewan Автор вопроса
Anatoly Shirokov
только смотри, если кто-то напишет: std::shared_pt...

Написанного точно не будет. А вот shared_ptr как раз нужен из-за weak_ptr и того факта, что при завершении потока shared_ptr тоже уничтожится

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

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта