多线程编程pthread线程深入理解

Pthread POSIX threads 的简称,是POSIX线程标准

前几篇博客已经能给你初步的多线程概念,在进一步学习线程同步等多线程核心知识之前,需要对多线程深入的理解。很多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅。

1.进程资源

         进程资源有存储资源其他资源。其他资源包含环境变量,地址,文件等。存储资源,进程的内存分配,博客C解析之三】C语言的内存分配具有很好的参考价值。多线程进程有所不同:

静态区:存储全局变量和静态变量

堆区:动态分配区

上述静态区,堆区以及其他资源统称为进程的共享资源。共享资源被该进程的所有线程所共享。

线程堆:线程自己维护的堆

线程栈:线程自己维护的栈

上述的线程堆,线程栈是每个线程独有的资源,线程间相互独立,不共享。当建立一个线程时,系统会为线程分配堆栈。

你可能已经发现,线程共享进程堆的同时,还自己维护一个堆栈

2.线程私有数据

         多线程编程下,进程的全局变量通过存储于共享数据区,实现为所有线程 共用。同时,线程还可以有自己的全局变量,称为线程的私有数据。爱思考的读者可能会问,那线程的非全局变量在哪呢,别忘了非全局变量的空间在栈中哦。

3.线程消亡

         线程消亡时,线程自由的线程堆栈会被释放,归还给系统,同时线程的私有数据也会被释放。线程的共享资源,静态区,共享的进程堆以及其他资源,由于这些资源是线程间共享的,故不会随线程消亡而释放。

         需要特别注意的是,线程堆与共享的进程堆之间的差异。

         线程理解至此,之后的进一步学习,会有更深入的体会。

来自 <https://blog.csdn.net/lovecodeless/article/details/24468107>

【C/C++多线程编程之五】pthread线程深入理解相关推荐

  1. Linux多线程编程:pthread线程创建、退出、回收、分离、取消

    文章目录 Linux线程 1.简单了解一下线程 2.线程创建:pthread_create 3.线程传参注意事项 4.线程退出:pthread_exit 5.线程回收:pthread_join 6.线 ...

  2. 多线程编程学习笔记——线程池(二)

    接上文 多线程编程学习笔记--线程池(一) 三.线程池与并行度 此示例是学习如何应用线程池实现大量的操作,及与创建大量线程进行工作的区别. 1. 代码如下 using System; using Sy ...

  3. 多线程(之五:线程协作)

    多线程(之五:线程协作) 线程通信 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费: 如果仓库中没有产品,则生产者将产品放入仓库 ...

  4. 多线程编程定长线程池

    多线程编程 定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 Executors的方式创建定长线程池(不推荐容易,容易内存溢出OOM) ThreadPoolExecutor构造函数创建定长线 ...

  5. java 多线程编程指南 pdf_Java-多线程编程

    Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...

  6. c#.net多线程编程教学(3):线程同步

    随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问. 考虑一种我们经常遇到的情况:有一些全局变量和共享的 ...

  7. python3多线程编程_Python 3-多线程编程

    Python 3-多线程编程 运行多个线程类似于同时运行多个不同的程序,但具有以下优点- 进程中的多个线程与主线程共享相同的数据空间,因此与单独的进程相比,可以更轻松地共享信息或彼此通信. 线程有时被 ...

  8. java 多线程同步_详解Java多线程编程中的线程同步方法

    1.多线程的同步: 1.1.同步机制:在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生.所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直 ...

  9. c++ 模板类实现堆栈实验报告_5分钟学会C/C++多线程编程进程和线程

    前言 对线程有基本的理解 简单的C++面向过程编程能力 创造一个简单的线程. 创造单个带参数的线程. 如何等待线程结束. 创造多个线程,并使用互斥量来防止资源抢占. 会使用之后,直接跳到"汇 ...

最新文章

  1. 巴西CC成为FreeStor全球首个用户
  2. VTK:标记数据映射器用法实战
  3. 9个必知的Python操作文件/文件夹方法
  4. Canvas动画 位图缓存提高效率和对应的内存问题
  5. WordPress七牛云镜像存储插件
  6. MySQL “error C3646: 'fd': 未知重写说明符”
  7. Hibernate学习笔记之EHCache的配置
  8. Python字符集编码和文件读写
  9. type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存
  10. spyder里import tensorflow报错显示没有tensorflow模块解决
  11. mysql 主从同步原理
  12. 禅道类似软件_五款免费项目管理软件推荐
  13. 论文伪代码(一)论文伪代码实现(Overleaf在线编辑)
  14. 戴尔微型计算机7060,戴尔 Dell OptiPlex 7060 微型机 :1 升的迷你小钢炮
  15. 如何快速比对两个文件夹中的文件
  16. Anaconda重装后【系统找不到指定的路径】
  17. 【hihoCoder】#1615 : 矩阵游戏II
  18. 【猿说VUE】初试模板语法,开启VUE编码之旅
  19. unity 实现手机震动
  20. Visual Studio Code 函数

热门文章

  1. Accuracy和Precision
  2. linux常用命令:sudo 命令
  3. python模块--json \ pickle \ shelve \ XML模块
  4. Compiling Cpp(zz)
  5. 多线程中Local Store Slot(本地存储槽)[转]
  6. [LeetCode] Decode Ways
  7. sphinx在window下和linux下加入开机自启动
  8. 卷积神经网络算法的一个实现
  9. GPU中与CUDA相关的几个概念
  10. python调用C函数库