LInux C++多线程编程基础(汇总)

Linux C++ 多线程实战一——多线程排序     由于最近在学习C++从底层(指针,对象模型,内存管理)再到网络socket编程,多线程编程,数据库编程等方面知识,需要从Java慢慢的迁移过来。这是以前学习Java的学习路线,所以就把原来Java的做的项目全部用C++重新实现一遍。1. 多线程基础    这个可以看我的博客,里面都有详细的介绍以及如何使用linux C++多线程编程,参考如下:    Linux C++ 多线程编程基础(汇... 阅读详情

1. 前言

    本次来写一篇关于C++多线程的基本使用。前面有一篇是互斥锁的入门,学了两天,做一下总结。


2. 多线程

    (1) 创建

多线程的表示pthread_t:

/* Thread identifiers.  The structure of the attribute type is not
   exposed on purpose.  */
typedef unsigned long int pthread_t;

在源码中,pthread_t实际上就只是一个无符号的long int变量,用于线程的唯一标识符。

下面是pthread_create的原型:

/* Create a new thread, starting with execution of START-ROUTINE
   getting passed ARG.  Creation attributed come from ATTR.  The new
   handle is stored in *NEWTHREAD.  */
extern int pthread_create (pthread_t *__restrict __newthread,
			   const pthread_attr_t *__restrict __attr,
			   void *(*__start_routine) (void *),
			   void *__restrict __arg) __THROWNL __nonnull ((1, 3));

参数介绍:

    __newthread表示线程的唯一标识符

    __attr表示线程的属性,之后会介绍几个小方面的

    __*(*__start_rountine)(void *)这个实际上就是一个函数的指针

    __arg表示函数的参数,需要将其转化成void*指针才可以传值

线程创建之后如果不进行其他的操作,那么线程会在主线程结束的时候就结束,主线程不会等到所有线程结束后才结束,例如下面的代码:

#include <iostream>
#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t count_nonzero;
unsigned count;

void* decrement_count(void* data)
{
    pthread_mutex_lock(&mut);

    while(count == 0)
    {
        printf("1\n");
        pthread_cond_wait(&coun
C++程序员面试题目总结(涉及C++基础、多线程多进程、网络编程、数据结构与算法)... 说明:C++程序员面试题目总结(涉及C++基础知识、多线程多进程、TCP/IP网络编程、Linux操作、数据结构与算法) 内容来自作者看过的帖子或者看过的文章,个人整理自互联网,如有侵权,请联系作者删除。 作者为工作两年经验的C++程序员,因巩固知识体系,面试,梳理以往看到过的知识点,故总结如下相关题目, 题目答案请自行google baidu,这里只提供题目。 一、C++基础知识面试题... 阅读详情

相关推荐

面试需要学习的编程知识(C++、Python)汇总-BMC(20190804建)(索引)

目录 C++ Python 算法导论 Linux 其他 编程问题 C++ static 结构体占多少字节 函数中的局部变量在内存中如何申请 C++的多态,及怎么实现,用例子说明 多态、继承、多态怎么实现(手写) C++内部实现机制 用过什么指针 C11特性了解吗 mat申请一个图像矩阵后怎么释放内存 set map低层实现的数据结构是什么 map,m[1]=“...

bl128ve900的博客 636

C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)

C++后台开发面试题总结(涉及C++基础知识、多线程多进程、TCP/IP网络编程、Linux操作、数据结构与算法) 因巩固知识体系,面试,梳理以往看到过的知识点,故总结如下相关题目,题目答案请自行google baidu,这里只提供题目。 一、C++基础知识面试题总结 1、多态的实现 2、说说C/C++的区别 3、const关键字 4、说说malloc/free 和 new/delete区别 5、指针和引用的区别 6、C++中堆和栈的区别 7、关键字static 8、在C++程序中调用被

Linux高级开发的博客 7592

Linux C++多线程编程

1.介绍   使用多线程的理由之一是和进程相比,它是一种非常”节俭”的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而运行一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程,而且,线程间彼此切换所需的时间也...

krais_wk的博客 3641

Linux c++ 多线程编程基础——互斥锁

1. 前言    本来是想整理一份多线程编程的博客,才发现C++的多线程比Java还要坑。涉及的范围实在有点广,所以之后分开来慢慢讲解,先说这个互斥锁。    首先是互斥,这是什么呢?说起来就又是一张的内容,详细自己去了解一下,参考书籍《操作系统——精髓与设计原理(第七版)》第五章,我这里将要说一下就好了。    互斥就是有一个进程使用了一个临界区的资源,另一个进程就无法使用。举个例子吧,在交通道...

PurpleDream的博客 1995

Windows C++多线程与Linux C++多线程编程

Windows C++:  所需头文件#include #include 开启一个线程:                hReader = (HANDLE)_beginthreadex(NULL, 0, startReader, this, 0, NULL);    其中,hReader为线程的句柄,             startReader为相应类中的友员函

抓住机遇 挑战自我 5005

【C++】Linux多线程开发

◼ 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多线程程序的一个特例,该进程只包含一个线程)◼ 进程是 CPU 分配资源的最小单位,线程是操作系统调度执行的最小单位。

love_boke的博客 2230

Linux·C++多线程基础知识

C++多线程基础知识

m0_64560763的博客 1917

c++多线程模式下的socket编程(线程池实现)

     socket 编程可以说是一个基本的技术掌握,而多个客户端向服务端发送请求又是一个非常常见的场景,因此多线程模式下的socket编程则显得尤为常见与重要。     本文主要利用线程池的技术,来实现多线程的模式,线程池的优点就不多述了,相信大家都能理解,就是减少了线程创建于销毁的时间,提高多线程的性能。     首先,先写个线程池:    下面分别是头文件 和cpp文件 #ifnd...

可乐小浣熊 1万+

新书预告:《Linux 多线程服务端编程:使用 muduo C++ 网络库》

看完了 W. Richard Stevens 的传世经典《UNIX 网络编程》, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下手? 书中示例代码把业务逻辑和 Sockets 调用混在一起,似乎不利于将来扩展?网络编程中的遇到一些具体问题该怎么办?例如程序在本机测试正常,放到网络运行上就经常出现数据收不全的情况?TCP 协议真的有所谓的“

陈硕的Blog 4万+

《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市

《Linux 多线程服务端编程:使用 muduo C++ 网络库》 电子版已在京东上市销售。购买地址:http://e.jd.com/30149978.html阅读效果:PCiPad目前京东的阅读器没有切白边功能,值得改进。

陈硕的Blog 3万+

展现 Linux C++服务器端编程的精华

Linux C++服务器端编程实战 服务器知识前提IPTCP伯克利 socket API安装 Linux Ubuntu (虚拟机)下载虚拟机:下载 ubuntu 系统:安装 ubuntu 系统XShell课后问题1. **如何判定一个类中是否有成员?**2. **sizeof 对于 类的尺寸估测**3. 当传递动态内存参数时,拒绝在参数传递就地开辟内存 服务器知识前提 IP 网络层协议(internet protocal): 无连接,不可靠 TCP 传输层协议(基于ip 的可靠稳定连接 transfer c

专注游戏研发 1385

Linux C++ 多线程编程基础——条件变量和信号量

1. 信号量:简述:用于进程传递信号的一个整数值。它在linux C++中表示为sem_t包含在&lt;semaphore.h&gt;中。操作:    函数sem_init原型如下:/* Initialize semaphore object SEM to VALUE. If PSHARED then share it with other processes. */ extern in...

PurpleDream的博客 2286

Linux平台C++多线程编程

1、简介  线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。   为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。   使用多线程的理由之一是和进程相比,它

cchangcs 606

安装和使用pandoc

支持 Markdown、DOCX、LaTeX、HTML、PDF、EPUB 等 60+ 种格式 的互相转换

PLANTTHESON的博客 6832

R语言dlnm包避坑指南:手把手教你配置交叉基矩阵(附温度分层与滞后多项式设置)

本文详细介绍了R语言dlnm包在配置交叉基矩阵时的实用技巧与避坑指南,特别针对温度分层与滞后多项式设置提供了具体参数配置建议。通过解析`crossbasis()`函数的核心参数、温度分析的分层策略以及不同基函数的适用场景,帮助研究者高效构建分布滞后非线性模型,避免常见错误并优化模型性能。

weixin_34094282的博客 402

ESP32搭配FT6236触摸屏:从芯片手册到完整I2C驱动代码的保姆级解析

本文详细解析了ESP32搭配FT6236触摸屏的I2C驱动开发过程,从芯片手册解读到完整代码实现。通过硬件架构分析、寄存器配置、I2C通信封装及触摸数据处理等步骤,提供了一套完整的驱动解决方案,帮助开发者快速掌握ESP32与触摸屏的交互技术。

weixin_29174385的博客 294

STM32duino LSM6DSO驱动库:低功耗IMU工程化实践

惯性测量单元(IMU)是智能终端与工业设备实现运动感知的核心传感器,其性能关键在于数据精度、实时响应与系统功耗的协同优化。LSM6DSO作为集成加速度计与陀螺仪的六轴MEMS器件,依托片上有限状态机(FSM)和机器学习核心(MLC),支持自由落体检测、计步器、6D方向识别等硬件自治功能,显著降低主控CPU负载。在STM32平台下,通过深度耦合HAL/LL库、显式引脚管理、DMA加速SPI传输及EXTI中断协同,可实现亚毫秒级事件响应与微安级待机功耗。本文聚焦STM32duino生态中LSM6DSO驱动的工程

weixin_36304957的博客 552

Python与numpy版本兼容性排查指南

本文详细解析了Python与numpy版本兼容性问题,提供了快速诊断和解决版本冲突的实用方法。通过查看版本信息、使用官方兼容性对照表以及降级或升级环境等方案,帮助开发者有效避免常见的报错问题,如'ImportError'和'AttributeError'。文章还介绍了使用虚拟环境和requirements.txt等工程实践,确保项目依赖的稳定性。

weixin_29089057的博客 320

别再买错磁铁了!手把手教你为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁

本文详细解析了为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁的关键要点。从充磁方向的物理本质到供应商沟通技巧,再到安装工艺的黄金法则,帮助工程师避免常见错误,确保磁编码器稳定工作。特别强调了径向充磁的重要性及验证方法,并提供了尺寸选择、温度特性和抗干扰设计的实用建议。

weixin_26750481的博客 316

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 408

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4048

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: Linux c++ 多线程编程基础——互斥锁
下一篇: Linux C++ 多线程编程基础——条件变量和信号量
PurpleDeam
博客等级 码龄11年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值