Итак, существует список функций C++11, поддерживаемых визуальная студия.
Поддержка thread_local помечена как частичная. Мне не удалось найти объяснение, что именно здесь означает частичная поддержка. Они просто использовали псевдоним __declspec(thread)?
Я мог бы просто использовать boost::thread_specific_ptr, но, похоже, есть некоторые отчеты, которые boost::thread_specific_ptr работает медленно. Это может быть или не быть правдой.
В частности, мне нужен быстрый TLS на x86/x64 в самых последних версиях linux+gcc и windows+msvc. Быстро означает отсутствие системных вызовов, где это возможно (я думаю, что это возможно для вышеперечисленных платформ).
thread_local
. - person James McNellis   schedule 08.01.2012errno
,GetLastError
— это просто еще один способ возврата кодов ошибок. Это может быть удобнее, чем возвращать напрямую, но я категорически против этого вообще. Я не хочу, чтобы каждая библиотека добавляла одно слово хранилища в каждый мой поток, который может даже не использовать библиотеку. Другой случай: контексты, такие как контекст рендеринга OpenGL. Кто-то может возразить, что удобно установить контекст один раз, а затем предположить, что он глобальный, но затем попробовать выполнить рендеринг в несколько контекстов из одного потока или разработать оболочку ООП для контекста, чтобы понять, почему он неисправен. - person Yakov Galka   schedule 08.01.2012std::cout
? Менеджер памяти? ОПЕРАЦИОННЫЕ СИСТЕМЫ? - person GManNickG   schedule 08.01.2012std::cout
. Предполагая, что вы имеете в виду, что диспетчер памяти - это «куча», опять же: у вас может быть более одной кучи. Подумайте, почему STL любит распределители. «ОС» — это «постоянные данные» с точки зрения вашей программы, т. е. ОС не меняется во время работы вашей программы. - person Yakov Galka   schedule 08.01.2012std::cout
? - person GManNickG   schedule 08.01.2012std::cout
имеет состояние форматирования, поэтому это изменяемый объект. Я бы предпочел что-то вродеstd::ostream local_cout(standard_output);
, гдеstandard_output
не меняется во время выполнения процесса. - person Yakov Galka   schedule 08.01.2012YourLibContext lib; lib.JumpFromTower();
. Это дает вам еще большую гибкость и будет иметь на одно косвенное обращение меньше для каждого доступа по сравнению с TLS. Эллоф: что? Насколько местные ГСЧ дороже? ГСЧ — хороший пример, когда вам не не нужны ни глобальные, ни TLS. - person Yakov Galka   schedule 08.01.2012rand()
под ваши нужды просто найдется. - person Yakov Galka   schedule 11.01.2012