【C/C++多线程编程之五】pthread线程深入理解
多线程编程之pthread线程深入理解
Pthread是 POSIX threads 的简称,是POSIX的线程标准。
前几篇博客已经能给你初步的多线程概念,在进一步学习线程同步等多线程核心知识之前,需要对多线程深入的理解。很多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅。
1.进程资源:
进程资源有存储资源与其他资源。其他资源包含环境变量,地址,文件等。存储资源,进程的内存分配,博客【C解析之三】C语言的内存分配具有很好的参考价值。多线程进程有所不同:
静态区:存储全局变量和静态变量
堆区:动态分配区
上述静态区,堆区以及其他资源统称为进程的共享资源。共享资源被该进程的所有线程所共享。
线程堆:线程自己维护的堆
线程栈:线程自己维护的栈
上述的线程堆,线程栈是每个线程独有的资源,线程间相互独立,不共享。当建立一个线程时,系统会为线程分配堆栈。
你可能已经发现,线程共享进程堆的同时,还自己维护一个堆栈。
2.线程私有数据:
多线程编程下,进程的全局变量通过存储于共享数据区,实现为所有线程 共用。同时,线程还可以有自己的全局变量,称为线程的私有数据。爱思考的读者可能会问,那线程的非全局变量在哪呢,别忘了非全局变量的空间在栈中哦。
3.线程消亡:
线程消亡时,线程自由的线程堆栈会被释放,归还给系统,同时线程的私有数据也会被释放。线程的共享资源,静态区,共享的进程堆以及其他资源,由于这些资源是线程间共享的,故不会随线程消亡而释放。
需要特别注意的是,线程堆与共享的进程堆之间的差异。
线程理解至此,之后的进一步学习,会有更深入的体会。
来自 <https://blog.csdn.net/lovecodeless/article/details/24468107>
【C/C++多线程编程之五】pthread线程深入理解相关推荐
- Linux多线程编程:pthread线程创建、退出、回收、分离、取消
文章目录 Linux线程 1.简单了解一下线程 2.线程创建:pthread_create 3.线程传参注意事项 4.线程退出:pthread_exit 5.线程回收:pthread_join 6.线 ...
- 多线程编程学习笔记——线程池(二)
接上文 多线程编程学习笔记--线程池(一) 三.线程池与并行度 此示例是学习如何应用线程池实现大量的操作,及与创建大量线程进行工作的区别. 1. 代码如下 using System; using Sy ...
- 多线程(之五:线程协作)
多线程(之五:线程协作) 线程通信 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费: 如果仓库中没有产品,则生产者将产品放入仓库 ...
- 多线程编程定长线程池
多线程编程 定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 Executors的方式创建定长线程池(不推荐容易,容易内存溢出OOM) ThreadPoolExecutor构造函数创建定长线 ...
- java 多线程编程指南 pdf_Java-多线程编程
Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...
- c#.net多线程编程教学(3):线程同步
随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问. 考虑一种我们经常遇到的情况:有一些全局变量和共享的 ...
- python3多线程编程_Python 3-多线程编程
Python 3-多线程编程 运行多个线程类似于同时运行多个不同的程序,但具有以下优点- 进程中的多个线程与主线程共享相同的数据空间,因此与单独的进程相比,可以更轻松地共享信息或彼此通信. 线程有时被 ...
- java 多线程同步_详解Java多线程编程中的线程同步方法
1.多线程的同步: 1.1.同步机制:在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生.所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直 ...
- c++ 模板类实现堆栈实验报告_5分钟学会C/C++多线程编程进程和线程
前言 对线程有基本的理解 简单的C++面向过程编程能力 创造一个简单的线程. 创造单个带参数的线程. 如何等待线程结束. 创造多个线程,并使用互斥量来防止资源抢占. 会使用之后,直接跳到"汇 ...
最新文章
- 巴西CC成为FreeStor全球首个用户
- VTK:标记数据映射器用法实战
- 9个必知的Python操作文件/文件夹方法
- Canvas动画 位图缓存提高效率和对应的内存问题
- WordPress七牛云镜像存储插件
- MySQL “error C3646: 'fd': 未知重写说明符”
- Hibernate学习笔记之EHCache的配置
- Python字符集编码和文件读写
- type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存
- spyder里import tensorflow报错显示没有tensorflow模块解决
- mysql 主从同步原理
- 禅道类似软件_五款免费项目管理软件推荐
- 论文伪代码(一)论文伪代码实现(Overleaf在线编辑)
- 戴尔微型计算机7060,戴尔 Dell OptiPlex 7060 微型机 :1 升的迷你小钢炮
- 如何快速比对两个文件夹中的文件
- Anaconda重装后【系统找不到指定的路径】
- 【hihoCoder】#1615 : 矩阵游戏II
- 【猿说VUE】初试模板语法,开启VUE编码之旅
- unity 实现手机震动
- Visual Studio Code 函数