我正在用 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);
}
最佳答案
只有在您在清理方法中释放分配的对象的情况下才会调用析构函数。否则,不行。
是的,A 部分中的清理调用顺序是正确的。
关于c++ - 线程取消 (pthread) & C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4224878/