C++并行开发Pthread之线程(一)

C++多线程一:pThread https://www.runoob.com/cplusplus/cpp-multithreading.html 1.创建线程 下面的程序,我们可以用它来创建一个 POSIX 线程: #include <pthread.h> pthread_create (myThread, attr, start_routine, arg) 在这里,pthread_create创建一个新的线程,并让它可执行。下面是关于参数的说明: 参数 描述 myThread 指向线程标识符.. 阅读详情

线程对象

pthread_t

属性:竞争范围、栈大小、栈地址、分离状态、调度策略和参数

状态:可运行、运行、停止、休眠(阻塞)

Pthread库可用于创建、维护和管理多线程和应用程序中的线程。

 

1.创建线程

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

 若成功则返回0,否则返回出错编号

参数

  第一个参数为指向线程标识符的指针。

  第二个参数用来设置线程属性。

  第三个参数是线程运行函数的起始地址。

最后一个参数是运行函数的参数。

 

2.结合线程(pthread_join)

Pthread_join用于结合或者再次结合进程中的控制流。Pthread_join导致调用线程它挂起,直到目标进程终止。它类似进程所使用的wait()函数。这个函数有线程的创建者调用,该调用线程等待新的线程终止并返回,然后再次结合到调用线程的控制流中。

intpthread_join(pthread_t thread,void **value_ptr)

参数thread是调用线程正在等待的目标线程。如果目标线程成功返回,则它的退出状态保存在value_ptr中

3.获取线程的id

pthread_tpthread_self(void)

当一个线程被创建之后,会将线程id返回到调用线程。一旦线程有了自己的id之后,可以将id传递给进程中的其他线程。

4.比较两个线程

pthread_equal(pthread_tthreadA, pthread_t threadB)

如果相同,返回非零值,否则返回零。

5.线程属性对象pthread_attr_t

线程有一组属性是可以在创建线程的时候指定。该属性封装在一个对象中,可以用来设置一个或者一组线程的属性。

pthread_attr_t拥有一些方法来设置

属性函数的类型

pthread属性函数

初始化

pthread_attr_init()

pthread_attr_destory()

栈管理

pthread_attr_setstacksize()

pthread_attr_getstacksize()

pthread_attr_setguardiseze ()

pthread_attr_getguardiseze ()

pthread_attr_setstack ()

pthread_attr_getstack ()

pthread_attr_setstackddr ()

pthread_attr_getstackddr ()

分离状态

pthread_attr_setdetachstate ()

pthread_attr_getdetachstate ()

竞争范围

pthread_attr_setscope ()

pthread_attr_getscope ()

调度继承机制

pthread_attr_setinheritsched()

pthread_attr_getinheritsched()

调度策略

pthread_attr_setschedpolicy()

pthread_attr_getschedpolicy()

调度参数

pthread_attr_setschedparam()

pthread_attr_getschedparam()

 

 

 

6.使用Pthread创建分离的线程

在默认情况下,当线程退出时,操作系统在线程同另一个线程结合时保持线程的完成状态以及现场id。如果退出的线程不同其他线程结合,则称退出的线程是分离的(detached)。这种情况下,不保存完成状态和线程id。在分离的线程上不能使用pthread_join。否则会报错。

已经运行的线程是可以分离的。线程可能不再对目标线程结果感兴趣,线程可以分离,使得线程一旦退出,它的资源就可以被收回。

调用形式

intpthread_detach(pthread_t tid);

 

二、管理线程

1.终止线程

当线程到达程序指令结尾时,就会终止。当线程终止后,pthread库收回线程使用的系统资源并保存它的退出状态。线程也可能会在它执行完所有指令之前,并另一个对等的线程提取终止。

A.自终止

线程可以调用pthread_exit()方法来终止

int pthread_exit(void * value_ptr)

 

当可结合线程结束执行之后,它会返回到将它作为目标线程调用pthread_join的线程。当终止线程调用pthread_exit()时候,它在$value_ptr中得到退出状态。退出状态被返回到pthread_join.

B.终止对等线程

使用pthread_cancel()来终止对等线程。应用程序中可能会有一个线程监视其他线程的工作。如果某个线程执行不力或者是不在需要,为了节省系统资源,有必要终止该线程。多个线程可能用于解决一个问题,但是一旦某个线程得到解答,其他的线程可以被监视线程或是是得到解答的线程取消。

      对于 pthread_cancel 的调用时取消一个对等线程的请求。这个请求可能立即被同意、稍后被同意、甚至被忽略。
基于pthread的线程池,C++实现 最近项目需要用到线程池,以前没接触过,断断续续学了两三个星期吧 先在网上找了一个用C实现的,例子挺多,不过我只看了一个 http://www.cnblogs.com/newth/archive/2012/05/09/2492459.html 我觉得写得比较简洁易懂 项目是C++写的,用的ACE框架,而且系统不算小,如果直接用C的话可能会破坏系统原有的封装和扩展性 可能会用ACE的ACE_ 阅读详情

相关推荐

pthread原生线程库

pthread原生线程库是Linux系统中用于支持多线程编程的标准库。它基于POSIX标准,提供了创建、管理和控制线程的一整套API。:pthread库是跨平台的,被广泛应用于Unix和类Unix系统中,包括Linux和macOS。:使用pthread库创建线程需要包含pthread.h头文件,并通过函数来创建新的线程。该函数接受一个线程ID指针、线程函数指针、传递给线程函数的参数以及线程属性结构体指针。:pthread库允许设置线程属性,如栈大小、调度策略等。例如,函数可以设置每个进程的栈的最低地址。

如无必要,勿增实体。 1553

【多线程】【C++ 知识点】pthread_join学习

pthread_join 介绍

Lionel的专栏 2851

【C/C++多线程编程之十】pthread线程私有数据

多线程编程之线程私有数据      Pthread是 POSIX threads 的简称,是POSIX的线程标准。         线程同步从互斥量【C/C++多线程编程之六】pthread互斥量,信号量【C/C++多线程编程之七】pthread信号量,条件变量【C/C++多线程编程之八】pthread条件变量,读写锁【C/C++多线程编程之九】pthread读写锁,多线程的同

Jiangwei的专栏 7196

C++之pthread_join()与pthread_detach()(一百一十)

#include <iostream> #include <pthread.h> #include <unistd.h> void *process(void *data){ while (1){ printf("xxx---------->I'm is Son thread...\n"); sleep(1); } pthread_exit(nullptr); } int main(){ pthread_t pid; printf("xxx-.

Android系统攻城狮 1391

C++ 多线程之OpenMP并行编程使用详解

C++ 多线程之OpenMP并行编程使用详解

yohnyang的博客 1万+

深度解析direct path write temp与ASM IO性能问题:Oracle 19.17视图查询优化指南

本文深度解析了Oracle 19.17版本中复杂视图查询出现`direct path write temp`与`ASM IO for non-blocking poll`性能瓶颈的根本原因。通过对比11.2.0.4版本的执行计划差异,文章提供了从CBO参数调整、存储层优化到SQL架构重构的完整实战调优指南,帮助DBA有效解决升级后的查询性能问题。

2y3u4i5o6p的博客 1100

C++的并发、轮询以及多线程机制(thread以及pthread)

**并发:** 多个任务同时间段进行,一个可执行exe文件就是一个进程,并发的实现可通过执行多个exe文件或者给它开多线程。 **轮询: **单核cpu不能实现真正的并发,10个任务,第一个任务执行10ms,马上切换到第二个任务,看着就像多任务同时处理并发,但是是个假并发。这种方法也叫轮询 多线程:多个任务一起执行

weixin_42569526的博客 5065

Ansys Lumerical 2023 R1.2新功能实战:薄膜铌酸锂调制器仿真全流程解析

本文详细解析了Ansys Lumerical 2023 R1.2在薄膜铌酸锂电光相位调制器仿真中的最新功能与应用。通过实战演示,展示了从电极配置、电场计算到模式分析的全流程,重点介绍了各向异性介电常数支持和多物理场耦合优化等关键技术,助力开发者高效设计高性能光通信器件。

weixin_28454475的博客 1207

使用pthread进行并行编程

使用pthread进行并行编程 进程是一个运行程序的实例;线程像一个轻量级的进程;在一个共享内存系统中,一个进程可以有多个线程 POSIX® Threads: 即 Pthreads,是一个 Unix 系统标准;一个可以用于 C 语言的库;是多线程编程的一个 API 接口。 第一个 pthreads "hello, world"程序: #include <stdio.h> #includ...

Dalham的博客 4603

不会写GLSL?用Cesium 1.120 + Heatmap.js 2.0.5也能搞定动态洪水模拟(附完整源码)

本文介绍了一种无需GLSL编程的3D洪水动态模拟方案,结合Cesium 1.120和Heatmap.js 2.0.5实现高效可视化。通过数据层、可视化层和集成层的技术降级方案,开发者可以快速构建专业级洪水演进效果,适用于应急管理、水利工程等场景。文章包含完整源码和性能优化技巧。

weixin_30329623的博客 521

Redis简介和项目应用

内存优先架构简介Redis的读写操作都是在内存中执行的,计算机内存的读写速度极快,比机械硬盘的读写快很多,因此也会比MySql采用机械读写的方式性能更高。但是这样会产生一个问题,当Redis重启之后,内存中的数据就会丢失,为了保证数据不会因为服务器重启而丢失,Redis实现了数据持久化的机制,这个机制会把数据存储到磁盘中,当服务器重启的时候,能够从磁盘中恢复原有的数据。

人工智能、机器学习 758

C/C++ 用 pthread 进行多线程开发

作为一个程序员,不管你用的开发语言是 C、C++、Java、Python 或者其它,你总会需要处理多任务。 多线程是实现多任务处理的一种最常用的手段,线程相比进程而言显得轻量级。 本文分享如何用 C 进行多线程开发。 核心在于 pthread 这个库。 调用 pthread_create()函数就可以创建一个线程。 它的函数原型如下: #include &lt;pthread.h&gt; exte...

frank 的专栏 2万+

光斑定位 - MATLAB实现

光斑定位是一种常见的图像处理任务,它涉及到在图像中准确定位光斑或亮点的位置。在本篇文章中,我们将使用MATLAB来实现光斑定位的算法,并提供相应的源代码。希望本文提供的MATLAB代码和步骤能够帮助您实现光斑定位任务。通过这些代码,您可以在MATLAB环境中轻松地定位光斑,并在图像上进行可视化展示。这样,我们就完成了光斑定位算法的MATLAB实现。通过以上步骤,我们可以得到一个在光斑位置上标记的图像,从而实现了光斑的准确定位。光斑定位 - MATLAB实现。

qq_39605374的博客 764

C++ 多线程编程(二):pthread的基本使用

pthread中的p是POSIX的缩写,而POSIX是Portable Operating System Interface的缩写,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。(Windows环境下无pthread,Linux GCC4.6以下编译需加-pthread编译选项)std::thread是C++11中的新特性,将多线程程序的编写提升到了语言层面,使得编写的多线程程序的可移植性大大提高。

海纳百川,有容乃大。 2万+

【49】软考软件设计师——冲刺复盘:高频易错点与应试策略|复盘清单+应试技巧

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第49篇,属于**模块六:冲刺与模拟**终篇,聚焦考前最后阶段的“精准复盘+应试提分”。全文围绕“高频易错点清零、答题时间优化、应急处理落地”三大核心,梳理9大知识领域的典型易错点(附避坑技巧)、优化版答题时间分配(含取舍策略)、考中全场景应急方案,配套可直接使用的“复盘清单”和“应试技巧手册”,帮助考生在最后阶段查漏补缺、固化得分逻辑,避免因低级错误丢分,以“稳、准、快”的状态应对考试。下一篇第50篇(终章)将进行全专栏知识体系回顾、考试策略总结

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 439

Python爬虫实战:手把手教你如何抓取农作物品种名录,构建标准化种业索引数据库!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 290

Windows下使用Dev-C++开发基于pthread的多线程。

一、下载Windows版本的pthread 目前最新版本为:pthreads-w32-2-9-1-release.zip 二、解压pthread到指定目录 我选择的是D:\DEV-CPP\Pthread 完成后,该目录会多出三个文件夹:Pre-built.2 ,pthreads.2 , QueueUserAPCEx 。 三、配置Dev-C++编译选项 1、 点击"Tools" ---->“...

qq_41681845的博客 3493

三维重建(十三)——多视角重建

本文综述了多视角三维重建技术,涵盖静态和动态场景的重建方法。介绍了从图像获取到纹理映射的SFM流程,以及非刚性重建(NRSFM)的挑战和解决方案。重点探讨了基于可微渲染的重建方法,以及数据采集策略、相机标定和同步技术。文章还讨论了如何用单视角相机模拟多视角重建,总结了关键技术和未来研究方向。

河海大学研究生在读的学习笔记 1058

C++多线程pthread和thread

多线程

natureworld2010的博客 8166

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VS 2019配置多线程pthread库

VS 2019配置多线程pthread库 下载库文件 在学习c++过程中,c++多线程一般需要用到pthread多线程库,这是一般是假设我们使用的是 Linux 操作系统,编译工具是gcc的情况下,但是大多数情况咱们开发的操作系统是Windows,编译工具是Visual Studio。本文章的基础环境是win10,VS 2019。 先去下载pthread库 ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 解压后会看

ZPeng_优快云的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pthread线程库使用介绍

多线程的开发和应用在平时的项目中使用非常频繁。Linux C++中,一般使用pthread库操作线程相关业务,不少公司一般都会基于该线程库的基本接口进行封装,使用起来更加方便易用。本文对该线程库的常用接口和使用方法做个介绍。 一、创建线程前的工作——设置线程属性 1、线程属性结构体的成分 线程具有属性,属性结构体用pthread_attr_t表示。它的结构如下...

Hearz的博客 4859

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c++中通过pthread实现多线程

一 环境  1.  包含头文件#include)   2.编译时加上-lpthread参数   二 函数      1. int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg); ----创建线程

wuwenjunwwj的专栏 1万+

C++多线程1——pthread

一、多核时代 随着数字IC工艺的提升,单核性能越来越高,但随之来的是功率密度增大,芯片发热严重,要进一步提升性能,很自然会想到C多核。将计算任务分配到不同的cpu,最后将结果整合,完成多核并行。 二、C\C++的多线程 C提供了很方便的多线程库,最基本的是pthread库,C++里有thread库(调用起来更加方便),还有omp库(不必自己设置线程,已封装好),接下来将介绍C++pthread库的应用实例,这些实例能够很方便移植到不同的应用中。omp库的实例可参看C++openmp并行计算实例。 三、实例

http://www.icfgblog.com/ 2021

【C++】pthread

pthread是C++98接口且只支持Linux,使用时需要包含头文件#include <pthread.h>,编译时需要链接pthread库,其中p是POSIX的缩写,而POSIX是Portable Operating System Interface的缩写,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。(Windows环境下无pthread,Linux GCC4.6以下编译需加-pthread编译选项)

chi's blog 3269

C++ 多线程——pthread_cancel 取消线程的疑惑

C++ 多线程——pthread_cancel 取消线程的疑惑 测试环境:Ubuntu18.04 pthread_cancel 简介 pthread_cancel(threadID)会发送终止信号给thread线程,如果成功则返回0,否则为非0值。 pthread_cancel调用并不等待线程终止,它只是向目标线程发Cancel信号, 提出取消请求。 但目标线程如何处理Cancel信号则由目标...

佛之水月的专栏 4047

C++ pthread库

pthread库基本函数创建线程终止线程连接线程分离线程互斥量mutex条件变量cond其余函数线程属性线程属性结构体线程属性函数 基本函数 创建线程 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 参数说明: 第一个参数表示线程id。 第二个参数表示线程参数。 第三个是线程的入口函数,入口函数的返回值必须为void*,且入口函数必须为

TABE_的博客 4983
上一篇: C++中static_cast, dynamic_cast, const_cast探讨
下一篇: 解析Tomcat内部结构和请求过程
我爱默小兜
博客等级 码龄14年 387粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值