博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同一进程间的线程共享和独立的资源
阅读量:2353 次
发布时间:2019-05-10

本文共 644 字,大约阅读时间需要 2 分钟。

共享的资源有

a. 堆 

由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)

b. 全局变量

它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的

c. 静态变量

虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的

d. 文件等公用资源 

进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID,是共享的。

 

独享的资源有

a. 栈

栈是独享的。栈是保证线程独立运行所必须的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。

b. 寄存器  这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC

一个进程创建的多个线程:每个线程都拥有自己私有的Stack,但共享一个Heap这样做的原因:

1、Stack常常用来存放 函数的参数,函数中使用的自动变量,存放过程活动记录;如果多个线程共享一个Stack会非常的凌乱,不方便使用

2、使用共享Heap的目的是为了高效的数据共享

线程间的数据交换有两种方式:

(1)共享内存方式sharedmemory(共享堆):最大的优势是快速

(2)消息传递方式messagepassing(不需要共享堆):优势在于安全

转载地址:http://mxwtb.baihongyu.com/

你可能感兴趣的文章
GIT的一些操作
查看>>
ZooKeeper 四字命令
查看>>
Mysql InnoDB锁问题
查看>>
ZooKeeper编程 基础教程
查看>>
Java 集合框架
查看>>
kafka 操作
查看>>
Java 集合框架 算法
查看>>
Java 集合框架 Set实现
查看>>
Java 集合框架 List实现
查看>>
Java 集合框架 Map 实现
查看>>
kafka 简单入门
查看>>
maven常用命令汇总
查看>>
Redis 方案
查看>>
ZooKeeper 数据与存储配置
查看>>
ZooKeeper 安装部署
查看>>
ZooKeeper 配置
查看>>
11.组合模式--Composite
查看>>
12.轻量模式--Flyweight
查看>>
13.外观模式--Facade
查看>>
开源史上最成功的八个开源软件
查看>>