linux线程控制
2023-12-19 23:49:47
线程的概念
线程库
线程创建
健壮性较差
每个线程都有自己独立的栈结构
?线程终止
void *retval
:线程的返回值,可以是任意类型的指针。
调用 pthread_exit
将导致调用线程的终止,并将 retval
作为线程的返回值。该返回值可以由其他线程通过 pthread_join
函数获取。
线程等待
thread
: 要等待的目标线程的标识符。retval
: 是一个指向指针的指针,目标线程结束时,可以通过这个指针获得目标线程的返回值。- 返回值:如果函数成功,返回 0;如果出现错误,则返回一个非零错误代码。
pthread_join
的调用将会阻塞调用线程,直到目标线程结束。如果目标线程已经结束,pthread_join
会立即返回。这个函数通常用于确保资源得到释放,或者需要从线程获取计算结果时。在目标线程结束后,与该线程相关的任何资源都会被回收,所以 pthread_join
也是一种防止资源泄露的手段。
关于参数
代码演示
#include<iostream>
#include<cassert>
#include<unistd.h>
#include<pthread.h>
#include<vector>
class ThreadData{
public:
char namebuf[1024];
pthread_t tid;
};
//新线程
void* thread_routine(void* args){
sleep(1);
ThreadData* td=static_cast<ThreadData*>(args);
int cnt=10;
while(cnt--){
std::cout<<"cnt:"<<cnt<<"&cnt"<<&cnt<<std::endl;
std::cout<<"我是新线程 我正在运行"<<std::endl;
sleep(1);
}
delete td;
pthread_exit(nullptr);
}
int main(){
pthread_t tid;
const int num=10;
std::vector<ThreadData*>threads;
for(int i=0;i<num;i++){
ThreadData* td=new ThreadData();
snprintf(td->namebuf,sizeof(td->namebuf),"%s:%d","thread",i+1);
pthread_create(&td->tid,nullptr,thread_routine,td);
threads.push_back(td);
}
for(const auto &it:threads){
std::cout<<"create thread:"<<it->namebuf<<":"<<it->tid<<std::endl;
}
//主线程
while (true)
{
std::cout<<"我是主线程 我正在运行"<<std::endl;
sleep(1);
}
return 0;
}
进程取消
它被用来请求取消同一进程中的另一个线程。当对一个线程调用 pthread_cancel
,系统会向那个线程发送一个取消请求,但是是否以及何时响应这个请求取决于目标线程的取消状态和类型。
进程分离
函数接口
pthread库
代码演示
封装一个thread
文章来源:https://blog.csdn.net/b1169909203/article/details/132384911
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!