Re: thread_local in C++17
От: Sm0ke Россия ksi
Дата: 03.02.23 04:43
Оценка:
В мапе дескрипторы нитей хранятся? Какие там ключи?

Можно доработать мапу до фабрики с шаблонным методом создания нити, который инфу сразу в мапу кладёт.

Или ещё этот метод делает нить из функции обёртки, а там локальная переменная с деструктором, удаляющим инфу из мапы.

Для этого не надо TLS. А там где надо TLS — можно и его.

К сожалению я не работал с treads на си++ пока ещё сам. Поправьте, если ошибаюсь.

Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?
Как система может помочь в таких случаях?
Re[2]: thread_local in C++17
От: пффф  
Дата: 03.02.23 05:03
Оценка: 1 (1)
Здравствуйте, Sm0ke, Вы писали:

S>Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?


Конечно. Поток могут прибить, или он сам вызовет что-то типа ExitThread


S>Как система может помочь в таких случаях?


Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов
Re[3]: thread_local in C++17
От: Sm0ke Россия ksi
Дата: 03.02.23 05:09
Оценка:
Здравствуйте, пффф, Вы писали:

П>Здравствуйте, Sm0ke, Вы писали:


S>>Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?


П>Конечно. Поток могут прибить, или он сам вызовет что-то типа ExitThread


S>>Как система может помочь в таких случаях?


П>Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов


Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись.
Или как и когда лучше удалить инфу по конченым нитям из мапы?
Re[4]: thread_local in C++17
От: пффф  
Дата: 03.02.23 05:18
Оценка: +1
Здравствуйте, Sm0ke, Вы писали:

П>>Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов


S>Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись.


Никак. Может, только попробовать вызвать что-то из потоковых функций с ID данного потока, и по коду ошибки разбираться. Главное, чтобы эта функция ничего не делала, какая--нибудь Query*.


S>Или как и когда лучше удалить инфу по конченым нитям из мапы?


Хз
Re[5]: запрос на subscribe
От: Sm0ke Россия ksi
Дата: 03.02.23 09:56
Оценка:
Вот бы иметь возможность из текущего thread запросить систему, чтобы отправила определённое сообщение после того как другой thread, с указанным дескриптором (номером) завершил своё выполнение, с уточнением фильтра по заданным способам его завершения при подписке, и информацией о способе завершения в сообщении от системы.

Желательно дать возможность программисту узнать список способов завершения.
Re[6]: запрос на subscribe
От: Carc Россия https://vk.com/gosha_mazov
Дата: 03.02.23 10:48
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Вот бы иметь возможность из текущего thread запросить систему, чтобы отправила определённое сообщение после того как другой thread, с указанным дескриптором (номером) завершил своё выполнение, с уточнением фильтра по заданным способам его завершения при подписке, и информацией о способе завершения в сообщении от системы.


S>Желательно дать возможность программисту узнать список способов завершения.

Wait-функции?
Aml Pages Home
Re[4]: thread_local in C++17
От: andyp  
Дата: 06.02.23 10:50
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись.

S>Или как и когда лучше удалить инфу по конченым нитям из мапы?

Никак. Проще такую конструкцию не использовать, на кончину нитей не закладываться, ведь они могут жить в пуле например и переиспользоваться под разное по надобности. Сам использовал фиксированный массив и нескольких десятков дескрипторов. Поток при старте запрашивает номер дескриптора. Номера раздаются в round-robbin манере и указывает на элемент массива. Нескольким потокам может быть выдан один дескриптор, тогда они сталкиваются на ресурсе (если их реально много и все они работают). Это разруливалось мьютксами.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.