文档章节

C++多线程编程<一>之常见面试问题

moki_oschina
 moki_oschina
发布于 2013/12/30 17:16
字数 815
阅读 818
收藏 1

一.概念性问答题    

    第一题:线程的基本概念、线程的基本状态及状态之间的关系?    

线程是程序执行流的最小单元。线程的基本状态包括:新线程态、可运行态、阻塞/非运行态、死亡态。

各状态之间的关系如下:

    第二题:线程与进程的区别?    

线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
4)二者均可并发执行.

    第三题:多线程有几种实现方法,都是什么?    

多线程有两种实现方法:继承Thread类,实现Runable接口

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

多线程同步有如下几种实现方法:

事件、信号量

多线程互斥有如下几种实现方法:

临界区、事件、信号量、互斥量

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

同步是一种特殊的互斥。当访问资源量存在先后的顺序的时候使用同步,当需要独占试访问资源时使用互斥。

如一个生产者和多个消费者之间。生产者和消费者之间是同步关系;消费者之间是互斥关系。

二、选择题

第一题:

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

 第二题

多线程中栈与堆是公有的还是私有的:  C

A:栈公有, 堆私有

B:栈公有,堆公有

C:栈私有, 堆公有

D:栈私有,堆私有

备注:

一个由C/C++编译的程序占用的内存分为以下几个部分

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

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

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

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

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

 

本文转载自:http://blog.csdn.net/morewindows/article/details/7392749

共有 人打赏支持
moki_oschina
粉丝 24
博文 189
码字总数 39444
作品 0
成都
程序员
GameHollywood 面试笔记

GameHollywood 面试笔记 Intro 面试的职位是 C++开发工程师,主要聊的还是C++。在过程中自我感觉面得还行,至少没上次那么蠢。 聊的内容主要集中在STL和线程安全、资源管理的层面。 惯例的,...

uniqptr
06/26
0
0
CSDN回帖得分大全(近两年)

√ vs2005调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] √ 为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! [VC/MFC 界面] √ CFileFind::FindFile 支持通配...

junwong
2012/03/09
0
0
如何自学成为C/C++程序员大牛

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/11
0
0
MFC+opencv244眼部追踪的问题

把opencv中的iplimage数据结构显示在mfc中德picture control控件上貌似是个费事的事情额 查了一堆发现全是用一个叫Cvvimage的玩意做的,结果用这个类之后出现了一个问题 由于要实时追踪和呈现...

zjhsdtc
2013/05/01
0
0
leetcode:程序员面试技巧

起因 写在开头,脑袋铁定秀逗了,历时20多天,刷完了leetcode上面151道题目(当然很多是google的),感觉自己对算法和数据结构算是入门了,但仍然还有很多不清楚的地方,于是有了对于每道题目...

siddontang
2014/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
6
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
3
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部