я читаю раздел документации для boost::thread_specific_ptr
, и пытается разобрать этот абзац:
Примечание. На некоторых платформах очистка потоковых данных не выполняется для потоков, созданных с помощью собственного API платформы. На этих платформах такая очистка выполняется только для потоков, которые запускаются с boost :: thread, если boost :: on_thread_exit () не вызывается вручную из этого потока.
Во-первых, что, вероятно, является педантичным моментом: я предполагаю, что они хотели сказать boost::this_thread::at_thread_exit()
скорее, чем boost::on_thread_exit()
, В противном случае я действительно потерялся.
Что еще более важно, что именно должен делать поток? Достаточно ли для этого передать некоторую неоперативную функцию в at_thread_exit (), или ему нужно передать что-то еще?
(Эта тема обсуждалась в комментариях Вот, но я все еще не уверен, что мне нужно делать.)
(Назад история: я ищу решение проблемы, которую я поднял раньше сегодня).
После еще нескольких копаний кажется, что загадочный абзац действительно хотел сказать on_thread_exit()
, Он имел в виду недокументированную функцию, которая не принимает аргументов.
Вот объявление этой функции и сопровождающий комментарий от boost_1_55_0 / boost / thread / detail / tss_hooks.hpp:
BOOST_THREAD_DECL void __cdecl on_thread_exit(void);
//Function to be called just be fore a thread ends
//in an exe or dll that uses Boost.Threads.
//Must be called in the context of the thread
//that is ending.
//Called automatically by Boost.Threads when
//a method for doing so has been discovered.
//Must not be omitted; may be called multiple times.
Итак, iiuc, мне нужно написать программно-зависимый код, который будет запускать вызов этой функции всякий раз, когда поток любого вида завершается, если этот поток использовал boost::thread_specific_ptr
,
Когда поток завершает работу, он должен уничтожить свои значения специфичных для потока указателей. В системах POSIX это делается функцией деструктора, зарегистрированной при создании ключа, специфичного для потока, см. http://pubs.opengroup.org/onlinepubs/007904975/functions/pthread_key_create.html, то есть этот комментарий не относится к системам POSIX.
Этот комментарий, вероятно, касается Windows, где также требуется ссылка на версию общей библиотеки boost::thread
в противном случае специфичные для потока указатели не уничтожаются.