В мапе дескрипторы нитей хранятся? Какие там ключи?
Можно доработать мапу до фабрики с шаблонным методом создания нити, который инфу сразу в мапу кладёт.
Или ещё этот метод делает нить из функции обёртки, а там локальная переменная с деструктором, удаляющим инфу из мапы.
Для этого не надо TLS. А там где надо TLS — можно и его.
К сожалению я не работал с treads на си++ пока ещё сам. Поправьте, если ошибаюсь.
Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?
Как система может помочь в таких случаях?
Здравствуйте, Sm0ke, Вы писали:
S>Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?
Конечно. Поток могут прибить, или он сам вызовет что-то типа ExitThread
S>Как система может помочь в таких случаях?
Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов
Здравствуйте, пффф, Вы писали:
П>Здравствуйте, Sm0ke, Вы писали:
S>>Возможны ли случаи, когда деструктор локального объекта не отработает, скажем при определённых способах завершения нити?
П>Конечно. Поток могут прибить, или он сам вызовет что-то типа ExitThread
S>>Как система может помочь в таких случаях?
П>Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов
Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись.
Или как и когда лучше удалить инфу по конченым нитям из мапы?
Здравствуйте, Sm0ke, Вы писали:
П>>Никак. Наоборот, система позволяет завершить поток в обход плюсовых механизмов
S>Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись.
Никак. Может, только попробовать вызвать что-то из потоковых функций с ID данного потока, и по коду ошибки разбираться. Главное, чтобы эта функция ничего не делала, какая--нибудь Query*.
S>Или как и когда лучше удалить инфу по конченым нитям из мапы?
Вот бы иметь возможность из текущего thread запросить систему, чтобы отправила определённое сообщение после того как другой thread, с указанным дескриптором (номером) завершил своё выполнение, с уточнением фильтра по заданным способам его завершения при подписке, и информацией о способе завершения в сообщении от системы.
Желательно дать возможность программисту узнать список способов завершения.
Здравствуйте, Sm0ke, Вы писали:
S>Вот бы иметь возможность из текущего thread запросить систему, чтобы отправила определённое сообщение после того как другой thread, с указанным дескриптором (номером) завершил своё выполнение, с уточнением фильтра по заданным способам его завершения при подписке, и информацией о способе завершения в сообщении от системы.
S>Желательно дать возможность программисту узнать список способов завершения. Wait-функции?
Здравствуйте, Sm0ke, Вы писали:
S>Как потоку, работающему с мапой дескрипторов получить сообщение, что другой поток всё? Чтобы удалить из мапы запись. S>Или как и когда лучше удалить инфу по конченым нитям из мапы?
Никак. Проще такую конструкцию не использовать, на кончину нитей не закладываться, ведь они могут жить в пуле например и переиспользоваться под разное по надобности. Сам использовал фиксированный массив и нескольких десятков дескрипторов. Поток при старте запрашивает номер дескриптора. Номера раздаются в round-robbin манере и указывает на элемент массива. Нескольким потокам может быть выдан один дескриптор, тогда они сталкиваются на ресурсе (если их реально много и все они работают). Это разруливалось мьютксами.