当前位置: 首页 > news >正文

服务器主机 网站安阳企业网站优化外包

服务器主机 网站,安阳企业网站优化外包,模板网站自助建站,嵌入式软件开发基础实训总结【Linux】信号的控制使用一.线程的创建pthread_create()接口二.线程等待1.为什么要线程等待?2.pthread_join()三.线程中止1.return2.pthread_exit五.线程应用C自带多线程在上次的博客中主要讲解了什么是线程 这次的博客主要是带大家把线程的相关接口简单的使用一下 …

【Linux】信号的控制使用

  • 一.线程的创建
    • pthread_create()接口
  • 二.线程等待
    • 1.为什么要线程等待?
    • 2.pthread_join()
  • 三.线程中止
    • 1.return
    • 2.pthread_exit
  • 五.线程应用
    • C++自带多线程

在上次的博客中主要讲解了什么是线程
这次的博客主要是带大家把线程的相关接口简单的使用一下

这次博客的篇幅不长,就单纯了解接口的,之后的博客才会来主要剖析线程

首先在Linux中有一个原生线程库
Linux中没有线程的概念,但是用户肯定是需要线程这个东西的

所以说Linux中有一个原生线程库(基本上所有的Linux中都有)
叫做pthread.h,正是这个原生线程库给用户提供了Linux中的线程的这个概念

这个博客接下来就是带大家来认识一下比较常用的原生线程库中的接口的

一.线程的创建

pthread_create()接口

在这里插入图片描述

这里带大家来认识一下对应的参数

在这里插入图片描述

大致就是这么个用处

#include<iostream>
#include<pthread.h>
#include<unistd.h>
void* run_pthread(void* argv)
{std::cout<<*(int*)argv<<std::endl;
}int main()
{pthread_t lwp_id;int i=10;pthread_create(&lwp_id,nullptr,run_pthread,(void*)&i);sleep(5);}

这边随便写一个用用

在这里插入图片描述

这里可能有人注意到,为什么要sleep(5)

众所周知,主线程和子线程是同时运行的,创建完子线程,这个主线程就直接结束了
所以说这个int i的变量直接就在主线程中被销毁了

所以说接下来就引出了线程等待

二.线程等待

1.为什么要线程等待?

首先什么是线程等待?

我们在什么地方看到过等待?

就是我们以前在进程博客中写过的,进程等待

还记得为什么父子进程要等待吗
因为你父进程把子进程生了下来,你不能不管啊
如果你父进程结束了,子进程没有人来回收,那就变成孤儿进程和僵尸进程

映射到我们线程,其实原理也差不多
但是还是有一点不一样的。
进程是独立的,但是线程是进程的执行流
当主线程结束后(也就是main函数结束),所有的子进程也会中断
那为什么要等待呢?
1.资源回收
线程退出时,其栈内存和系统资源不会自动释放,需要等待来正确释放

2.同步执行顺序:
确保某些操作在其他线程完成后执行

3.获取返回值:
就是进程执行的结果

所以说我们要介绍一个线程等待的接口
可以接受线程执行结果的返回值,而且是阻塞等待

2.pthread_join()

在这里插入图片描述
在这里插入图片描述
接口大致就是这样的思路

#include<iostream>
#include<pthread.h>
#include<unistd.h>
void* run_pthread(void* argv)
{std::cout<<*(int*)argv<<std::endl;
}int main()
{pthread_t lwp_id;int i=10;pthread_create(&lwp_id,nullptr,run_pthread,(void*)&i);pthread_join(lwp_id,nullptr);
}

在这里插入图片描述

这里我们把sleep,直接换成了 pthread_join(lwp_id,nullptr);
因为是阻塞等待,只会等待子线程处理完,才会结束,所以i的生命周期还在,没有被销毁

在这里插入图片描述
这里其实一直有个编译警告,这里没有放出来

意思就是子线程没有返回值
这里就带大家把这个等待线程的接受子线程返回值给用用

#include<iostream>
#include<pthread.h>
#include<unistd.h>
void* run_pthread(void* argv)
{std::cout<<*(int*)argv<<std::endl;return (void*)(intptr_t)1;
}int main()
{pthread_t lwp_id;int i=10;pthread_create(&lwp_id,nullptr,run_pthread,(void*)&i);void* ret;pthread_join(lwp_id,&ret);std::cout<<"running end= "<<(intptr_t)ret<<std::endl;
}

在这里插入图片描述
这个intptr_t是C++库中的一个整数类型,它专门用于安全地存储指针值
intptr_t 是一个有符号整数类型,其大小能够容纳任何有效的指针值

子线程执行结果是通过void*来返回的
所以说我们在子进程中返回void*

然后在pthread_join中接受的返回值是void()**

二级指针就是接受一级指针的地址的所以用取地址

这里要注意一点:
为什么在pthread_join中不考虑异常,只考虑返回值

因为线程出现异常问题,整个线程都完了,所以只有进程才会去考虑异常

三.线程中止

这个其实就是如何返回进程的返回值的

1.return

这个我们在上面的代码中使用过了,接下来就随便用用下一个

2.pthread_exit

在这里插入图片描述
这个其实就当return用就行

#include<iostream>
#include<pthread.h>
#include<unistd.h>
void* run_pthread(void* argv)
{std::cout<<*(int*)argv<<std::endl;pthread_exit((void*)(intptr_t)1);
}int main()
{pthread_t lwp_id;int i=10;pthread_create(&lwp_id,nullptr,run_pthread,(void*)&i);void* ret;pthread_join(lwp_id,&ret);std::cout<<"running end= "<<(intptr_t)ret<<std::endl;
}

在这里插入图片描述

五.线程应用

C++自带多线程

c++11也已经支持多线程


#include<iostream>
#include<thread>void run_code()
{std::cout<<"i am ok"<<std::endl;}int main()
{std::thread t(run_code);t.join();return 0;}

在这里插入图片描述

但其实在Linux中的C++的多线程也是封装的,底层用的还是pthread的原生线程库
因为你编译的时候,还是需要-lpthread链接原生线程库
在这里插入图片描述

不管是什么语言,底层都是调用的原生线程库,进行封装的
推荐使用语言自带的,因为具有可移植性

http://www.dtcms.com/a/435980.html

相关文章:

  • DS container adapters <B> priority_queue in Huffman Algorithm 2/99
  • 英语学习-Saints042
  • 建立网站条件一级域名如何分发二级域名
  • wordpress发布失败手机网站优化需要注意什么
  • 北京模板网站建设wordpress远程本地化
  • 【P0】Spring Cloud 面试篇
  • freertos内部机制
  • 苏州公司做变更网站建筑工程网站建设
  • 广州最好网站建设公司石家庄网站制作仓谷
  • 腾讯企点客户通长沙网站seo推广公司哪家好
  • 如何查看网站是哪家公司做的?双wordpress自动同步文章
  • 婚礼策划公司优化推广网站怎么做最好
  • 天津企业设计网站建设wordpress注册不成功
  • 何为“类”?(Java基础语法)
  • 德城区建设局网站建设部特殊工种查询网站
  • 如何做优化网站的原创性文章济南移动互联网开发
  • 建设部标准定额研究所网站c2c网站建设方案
  • 济南公司做网站的价格搜索引擎内部优化
  • 网站有效内容的宣传及推广关于做网站的ppt
  • wap网站 微信登录工商银行在线登录入口
  • 没有网站可以icp备案wordpress回到旧版编辑器
  • PINN训练新思路:把初始条件和边界约束嵌入网络架构,解决多目标优化难题
  • 公司主网站百度收录大量网站之类的信息crm客户管理系统哪个好
  • [嵌入式] U-Boot 环境变量深度解析:从 QSPI 到 eMMC 的 Linux 启动完整指南
  • 左右左布局网站建设适合新手的网站开发
  • 上海网站建设知识 博客wordpress 留言插件
  • 网站模板 英文wordpress文章存储位置
  • 麻城建设网站什么腾讯网站做任务能刷q币
  • 绿色网站模板大全品牌网站建设 d磐石网络
  • 企业网站的可信度建设包括厦门有家装饰