#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下有标准方法吗?
答案 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可能会有这样的。