线程的共享资源和私有资源

转自:http://blog.sina.com.cn/s/blog_798f21a0010108t0.html

————————————————————————————————————————————————————————

线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。     进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:

  1.线程ID

  每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标   识线程。

2.寄存器组的值

  由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线   程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便   将来该线程在被重新切换到时能得以恢复。

3.线程的堆栈

  堆栈是保证线程独立运行所必须的。

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

  4.错误返回码

  由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用   后设置了errno值,而在该线程还没有处理这个错误,另外一个线程就在此时   被调度器投入运行,这样错误值就有可能被修改。

  所以,不同的线程应该拥有自己的错误返回码变量。

  5.线程的信号屏蔽码

  由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自   己管理。但所有的线程都共享同样的信号处理器。

  6.线程的优先级

  由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参   数,这个参数就是线程的优先级。

时间: 2024-10-24 16:55:05

线程的共享资源和私有资源的相关文章

线程与进程&&线程私有资源

今天讨论一个问题,一同事说一个进程内线程的所有资源都能被彼此共享,我说线程私有堆栈空间不可以,为此争论了几句.今天加班用网上资源重新学习了下,以备以后查看 在多线程环境下,每个线程拥有一个栈和一个程序计数器.栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源.其他的资源(比如堆.地址空间.全局变量)是由同一个进程内的多个线程共享. 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发

(转)同一进程中的线程究竟共享哪些资源

线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID      每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标识线程. 2.寄存器组的值       由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须

同一进程中的线程究竟共享哪些资源

线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID       每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标 识线程. 2.寄存器组的值        由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线 程切换到另一个线程上

linux进程、线程(or子进程)、资源占用查看

#  linux进程.线程(or子进程).资源占用查看 查看进程: ps -ef | more  (-e:所有进程,-f:全格式) ++++++++++++++++++++++++++++++++++++ + UID :用户ID                     + + PID :进程ID                           + + PPID :父进程ID                                                 + + C :CPU占

线程共享全局变量和私有全局变量

共享全局变量实例: #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> int key=100; void *helloworld_one(char *argc) { printf("the message is %s\n",argc); key=10; printf("key=%d, the child is %u\n&

static变量的线程间共享,进程间不共享

JAVA中通常我们会使用static域变量来在内存中缓存数据或长驻内存数据,众所周知,static是类的所有实例所共享. 考虑一个问题,假如在多线程情况下,共享数据肯定会有危险的, 例如使用SimpleDateFormat工具的一个变量时,为方便作为util写为了static,后来 在几W条数据中会出现一个奇怪的日期,这就是在多线程下会出现问题导致的数据冲突, 一般这种能私有不共享的数据最好为一个实例一份拷贝,不要做为static若非要做,就对象同步锁,使之单线程. 现在考虑的问题是,在进程间,

Android资源之图像资源(状态图像资源)

在上一篇博文中.我主要解说了XML图像资源中的图层资源,在此图像资源博文中我会给大家陆续解说XMl图像资源的图像状态资源.图像级别资源.淡入淡出资源.嵌入图像资源.剪切图像资源和外形资源. 1.图像状态资源: Android SDK提供的Button控件默认样式显得有些单调.并且这样的样式与炫丽的界面搭配在一起极不协调.当然.我们能够使用ImageView或ImgaeButton控件配合不同状态的图像做出非常酷的button,这里我给出用java代码实现button按下与正常状态的特效: btn

ThreadLocal实现session中用户信息 的线程间共享(精)

ThreadLocal并不难理解,我总结的最简单的理解就是: ThreadLocal像其它变量一样(局部.全局.静态)也是一种变量类型,只是他是线程变量,更直白的说他是一种变量作用域,即他的作用域是当前线程(比如用户的一个请求算一个线程),ThreadLocal用于在一个线程间共享. ThreadLocal的set(String,Object)方法就是设置这个变量的名称.同时给这个变量赋值.当然同时也给予了这个变量的类型. @SuppressWarnings("unchecked")

线程间共享数据的一个例子

[申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:[email protected]] 题目:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 题目分析: 一.如果数组中全部为负数,则返回最大负数值即可 二.当既有正数也有负数的时候: (1)从左往右叠加,如果当前叠加值小于或者等于0,则放弃,叠加总和清0(加一个负数或者0是毫无意义的),从此位置继续重新叠加 (