我正在用 C++ 为 Linux 编写 MT 程序,我想知道线程取消是如何执行的。
据我了解,当线程被取消时,清理函数在线程函数内部被调用,线程函数被强制退出。这意味着两件事:
- 当线程被取消时,它仍然调用线程函数内创建的所有 C++ 对象的析构函数。
- 我可以将指向在线程函数中创建的对象的指针传递给清理函数。
我是对的,下面的代码工作得很好吗?
下面的代码中还有一个问题,当线程在SECTION 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);
}