您的位置:首页 > 游戏 > 游戏 > Linux中线程常用接口(创建,等待,退出,取消)

Linux中线程常用接口(创建,等待,退出,取消)

2024/10/6 12:31:31 来源:https://blog.csdn.net/2301_77479435/article/details/141101720  浏览:    关键词:Linux中线程常用接口(创建,等待,退出,取消)

 pthread_create

#include <pthread.h>

       int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

       Compile and link with -pthread.

编译时应注意。

#include<iostream>
#include<string>
#include<vector>
#include<pthread.h>
#include<unistd.h>using namespace std;void *start_routine(void *args)
{string name=static_cast<char*>(args);while(true){cout<<"new thread create success , name: "<<name<<endl;sleep(1);} 
}int main()
{// vector<pthread_t> tids; 
#define NUM 10for(int i=0;i<NUM;i++){pthread_t tid;char namebuffer[64];snprintf(namebuffer,sizeof(namebuffer),"%s:%d","thread",i);//pthread_create  pthread_create(&tid,nullptr,start_routine,namebuffer);//     pthread_create(&tid,nullptr,start_routine,(void*)"thread one");sleep(1);}while(true){cout<<"new thread create success,name : main thread"<<endl;sleep(1);}return 0;
}

//可重入函数->void *start_routine(void *args)

//局部变量具有临时性,在多线程中也适用--->每个线程都有自己独立的栈结构

cnt: 9 &cnt   0x7fa036708ef4
cnt: 9 &cnt   0x7fa035f07ef4
cnt: 9 &cnt   0x7fa035706ef4
cnt: 9 &cnt   0x7fa034f05ef4
cnt: 9 &cnt   0x7fa034704ef4
cnt: 9 &cnt   0x7fa033f03ef4
cnt: 9 &cnt   0x7fa033702ef4
cnt: 9 &cnt   0x7fa032f01ef4
cnt: 9 &cnt   0x7fa032700ef4
cnt: 9 &cnt   0x7fa031effef4

void *start_routine(void *args)
{sleep(1);ThreadData *td=static_cast<ThreadData*>(args);int cnt=10;while(cnt){cout<<"cnt: "<<cnt<<" &cnt   "<<&cnt<<endl;cnt--;// cout<<"new thread create success , name: "<<td->namebuffer<<" cnt: "<<cnt--<<endl;sleep(1);} delete td;return nullptr;
}
#include<iostream>
#include<string>
#include<vector>
#include<pthread.h>
#include<unistd.h>using namespace std;
class ThreadData
{
public:pthread_t tid;char namebuffer[64];
};
//可重入函数
//局部变量具有临时性,在多线程中也适用--->每个线程都有自己独立的栈结构
void *start_routine(void *args)
{sleep(1);ThreadData *td=static_cast<ThreadData*>(args);int cnt=10;while(cnt){cout<<"cnt: "<<cnt<<" &cnt   "<<&cnt<<endl;cnt--;// cout<<"new thread create success , name: "<<td->namebuffer<<" cnt: "<<cnt--<<endl;sleep(1);} delete td;return nullptr;
}int main()
{vector<ThreadData*> threads; #define NUM 10for(int i=0;i<NUM;i++){ThreadData *td=new ThreadData(); // char namebuffer[64];snprintf(td->namebuffer,sizeof(td->namebuffer),"%s:%d","thread",i+1);//pthread_create  pthread_create(&td->tid,nullptr,start_routine,td);//     pthread_create(&tid,nullptr,start_routine,(void*)"thread one");// sleep(1);threads.push_back(td);}for(auto &iter:threads){cout<<"create thread: "<<iter -> namebuffer << ":"<<iter->tid<<" success"<<endl;}while(true){cout<<"new thread create success,name : main thread"<<endl;sleep(1); }return 0;
}

pthread_exit

#include <pthread.h>

       void pthread_exit(void *retval);

       Compile and link with -pthread.

//可重入函数
//局部变量具有临时性,在多线程中也适用--->每个线程都有自己独立的栈结构
void *start_routine(void *args)
{sleep(1);ThreadData *td=static_cast<ThreadData*>(args);int cnt=10;while(cnt){cout<<"cnt: "<<cnt<<" &cnt   "<<&cnt<<endl;cnt--;// cout<<"new thread create success , name: "<<td->namebuffer<<" cnt: "<<cnt--<<endl;sleep(1);pthread_exit(nullptr);//-> return nullptr// //任何一个执行流调exit整个进程都会退出// exit(0);//不能用来终止线程} delete td;//return nullptr;//线程函数结束,return的时候线程就算终止了
}

pthread_exit(nullptr);//-> return nullptr

线程等待:pthread_join

       #include <pthread.h>

       int pthread_join(pthread_t thread, void **retval);

       Compile and link with -pthread.
 

线程异常,收到信号,整个进程都会退出。

线程取消: pthread_cancel

       #include <pthread.h>

       int pthread_cancel(pthread_t thread);
       int pthread_cancel(pthread_t thread);

       Compile and link with -pthread.

 线程如果是被取消的,退出码: -1(PTHREAD_CANCELED);

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com