如何在线程的创建和退出时调用函数?

时间:2017-02-14 15:10:06

标签: c++ linux multithreading operating-system posix

#include <pthread.h>
#include <iostream>

using namespace std;

void OnCreateThread()
{
    cout << "Create a thread." << endl;
}

void OnExitThread()
{
    cout << "Exit a thread." << endl;
}

void f(void*) {}

int main()
{
    //
    // What to do here ???
    //
    pthread_t dummy;
    pthread_create(&dummy, 0, f, 0);
    pthread_create(&dummy, 0, f, 0);
    while (true);
}

代码会创建两个本机线程,std::thread 以外,我希望它输出如下:

Create a thread.
Create a thread.
Exit a thread.
Exit a thread.

可以在Windows下使用FlsXXX函数完成。

但是,我不知道它是否也可以在Linux下完成。

Linux下有标准方法吗?

2 个答案:

答案 0 :(得分:1)

  

如何在线程的创建和退出时调用函数?

Pthreads API不提供线程创建的回调(std::thread API也没有)。

解决方案非常简单:在start_routine回调的开头和结尾调用函数。

void* f(void*) {
    OnCreateThread();
    OnExitThread();
    return nullptr;
}

如果您希望在线程提前终止时调用OnExitThread,您可能希望使用pthread_cleanup_push将其注册为回调。

PS。 start_routine回调必须返回void*

答案 1 :(得分:1)

至少存在一个pthread_cleanup_push函数,允许您添加将在线程终止后调用的函数。从来没有听说过相同的创作,但有些API可能会有这样的。