同一进程间的线程共享和独立的资源

共享的资源有

a. 堆 

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

b. 全局变量

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

c. 静态变量

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

d. 文件等公用资源 

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

 

独享的资源有

a. 栈

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

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


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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值