Я пишу программу MT для Linux на C ++, и я хочу знать, как выполняется отмена потока.
Насколько я понимаю, когда поток отменяется, функции очистки вызываются внутри функции потока и функции потокавынужден выйти.Это означает две вещи:
- Когда поток отменяется, он по-прежнему вызывает деструкторы для всех объектов C ++, созданных внутри функции потока.
- Я могу перейти к указателям на функции очистки для объектов, созданных в функции потока.
Правильно ли я и код ниже плохо работает?
Еще один вопрос в коде ниже, когда поток отменяется где-то в РАЗДЕЛ A , second_thread_cleanup_function () будет вызываться первым, верно?
class SomeObject
{
public:
~SimpleObject (void); // <- free dynamically allocated memory
void finalize (void);
// ...
}
void first_thread_cleanup_function (void* argument)
{
SomeObject* object (argument);
object->finalize ();
}
void second_thread_cleanup_function (void* argument)
{
// ... do something ...
}
void* thread_function (viod* argument)
{
SomeObject object;
pthread_cleanup_push (first_thread_cleanup_function, &object);
// ... some code ...
pthread_cleanup_push (second_thread_cleanup_function, NULL);
// ... SECTION A ...
pthread_cleanup_pop (0);
// .. some code ...
pthread_cleanup_pop (1);
}