os基础--多线程进程面试题02

参考:http://blog.csdn.net/wolenski/article/details/7969908

第四题:多线程同步和互斥有几种实现方法,都是什么?

线程间的同步方法大体可分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。
用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。内核模式下的方法有:事件,信号量,互斥量。

第五题:多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。

线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。

--------------------------------------------------我是分割线----------------------------------------------

下表是一个多线程加锁的规律表
  操作的结果与初值无关 操作的结果与初值相关
 写简单数据类型 不需要加锁① 需要加锁②
 写复杂数据类型 需要加锁③ 需要加锁④
 读简单数据类型 不需要加锁⑤ 不需要加锁⑥
 读复杂数据类型 需要加锁⑦ 需要加锁⑧

1.以下多线程对int型变量x的操作,哪几个不需要进行同步:
A. x=y;      B. x++;    C. ++x;    D. x=1;


2.多线程中栈与堆是公有的还是私有的

A:栈公有, 堆私有

B:栈公有,堆公有

C:栈私有, 堆公有

D:栈私有,堆私有

分析: 概念上进程作为资源分配的最小单元,线程作为任务调度的最小单元。
如果这题从概念上进行测试的话,就要从任务调度来讲了。
任务调度需要记录线程状态,寄存器上下文还有任务的控制指令。

就是变量和对象的引用存储在栈区中,而对象在存储在堆中。
一个由c/C++编译的程序占用的内存分为以下几个部分 

1、栈区(stack)―   由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构
中的栈。 

2、堆区(heap) ―   一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中
的堆是两回事,分配方式倒是类似于链表。 

3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一
块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 

4、文字常量区  ―常量字符串就是放在这里的。 程序结束后由系统释放 

5、程序代码区―存放函数体的二进制代码。 

栈和堆的地址是从两端相向增长的
栈很小,一般只有几十k,vc6好像是64k
堆很大,在win32的虚拟地址空间可以分配到2g的内存

栈由程序自动操作,包括局部变量,参数传递,函数跳转时的返回地址等信息
堆由程序员自行管理内存,优势,节省空间,不用时即释放,缺点,可能因使用不但造成内存泄露,野指针,造
成程序错误。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值