![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем привет.
следующий код:
выводит в консоль одинаковые ID`ы. но, к примеру, такой код, выводит разные:
второй вариант мне кажется правильным. или я чего-то недопонимаю? спасибо. Добавлено через 3 минуты и 48 секунд этот вариант тоже выводит разные ID`ы.
так какой вариант правильный? |
||||||
|
|||||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
boost:
не получается ли тут default-constructed id? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я так понял, что boost::this_thread::get_id() возвращает идентификатор контекста в котором объект boost::thread создан.
вот только как получить ID контекста в котором выполняется код(а не в котором живет объект boost::thread)? Добавлено через 1 минуту и 7 секунд та вот и не понятно... |
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
я не прав, не оттуда цитата...
то ж другое дело |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
boostcoder
boost::thread в отличии от POSIX использует не системные ID-шники а свои внутренние. У меня этот код выводит разные значения, но в принципе boost оставляет за собой право использовать заново ID уже завершенных потоков. Попробуй перенести вывод ID основого потока до join()-а, в таком случае оба потока на момент вывода существуют и обязаны быть уникальными. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
скажите, кому-либо, когда-либо, приходилось использовать ID`ы потоков для чего-то?
|
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
нет, так сделано именно для того, чтобы не зависеть от платформы. В POSIX нет никаких гарантий по поводу типа pthread_t, это сильно мешает реализации вывода идентификаторов, сравнению и так далее, потому в boost своя реализация, насколько я знаю это на самом деле обычный адрес.
Для логирования и отладки. Еще приходилось в WinAPI для работы с конкретным потоком, но в boost этот ID ничего не обозначает, он существует лишь для идентификации работающих потоков. Из применений можно например подсчитать хэш для thread::id и таким образом имитировать thread local storage в глобальном массиве. Можно найти применения при желании. Это сообщение отредактировал(а) azesmcar - 28.1.2011, 19:38 |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
в общем понял. кроме как для отладки, он никакой ценности не представляет.
еще раз спасибо. |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Ну почему же, я привел пример.
Да вообще в любой задаче, где нужна идентификация потоков. Можно использовать в реализацию work stealing thread pool-а, так-как там необходим TLS, но также нужна возможность получения доступа к локальным данным другого потока при необходимости. В таком случае глобальный массив с одним элементом для каждого потока ялвяется хорошим решением, никакой синхронизации (во всяком случае со стороны программиста, процессору тут наверняка придеться потрудиться). Хотя в данном случае было бы легче передавать очередной идентификатор потоку в виде аргумента при создании вместо подсчета хэша... в общем сложно однозначно сказать, может и пригодиться. |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я имел ввиду реальный опыт использования. а не возможности) |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Есть реальный пример (с родными thred id, а не boost'а, но суть та же)
Есть система, в которой есть главная нить, исполняющая аналог Виндового message loop'а (это не message loop, но суть та же). И есть некий класс (по сути RPC вызов, хотя не совсем RPC но сути это не меняет ![]() Для проверки - главный поток или не главный поток использовалось сравнение thread ID |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
![]() навеяло
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |