多线程问题及面试题目

来源:互联网 发布:mac怎么设置屏幕刷新率 编辑:程序博客网 时间:2024/06/06 18:10

主要来自morewindows博客。


1主线程创建子线程并传入一个指向变量地址的指针作参数,由于线程启动须要花费一定的时间,所以在子线程根据这个指针访问并保存数据前,主线程应等待子线程保存完毕后才能改动该参数并启动下一个线程。这涉及到主线程与子线程之间的同步。(线程保存的编号可能被修改,于是线程编号就可能出现了重复的情况)

2子线程之间会互斥的改动和输出全局变量。要求全局变量的输出必须递增。这涉及到各子线程间的互斥

 

 

关键段

1.关键段共初始化化、销毁、进入和离开关键区域四个函数。

2.关键段可以解决线程的互斥问题,但因为具有“线程所有权”,所以无法解决同步问题。主线程拥有线程所有权,可以多次进入关键段,导致

3.推荐关键段与旋转锁配合使用。

 

事件

线程编号的输出没有重复,说明主线程与子线程达到了同步。全局资源的输出是递增的,说明各子线程已经互斥的访问和输出该全局资源。

1.事件是内核对象,事件分为手动置位事件自动置位事件。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。

2.事件可以由SetEvent()来触发,由ResetEvent()来设成未触发。还可以由PulseEvent()来发出一个事件脉冲。

3.事件可以解决线程间同步问题,因此也能解决互斥问题。

 

互斥量

1.互斥量是内核对象,它与关键段都有“线程所有权”所以不能用于线程的同步。

2.互斥量能够用于多个进程之间线程互斥问题,并且能完美的解决某进程意外终止所造成的“遗弃”问题。

 

 

 

 

 

 

 

 

多线程题目:

一.概念性问答题

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

 

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

       这个题目问到的概率相当大,计算机专业考研中也常常考到。要想全部答出比较难。

 

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

 

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

       我在参加2011年迅雷校园招聘时的一面和二面都被问到这个题目,回答的好将会给面试成绩加不少分。

 

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

 

二.选择题

第一题(百度笔试题):

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

 

第二题(阿里巴巴笔试题)

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

A:栈公有,堆私有

B:栈公有,堆公有

C:栈私有,堆公有

D:栈私有,堆私有

 

三.综合题

第一题(台湾某杀毒软件公司面试题):

Windows编程中互斥量与临界区比较类似,请分析一下二者的主要区别。

 

第二题:

一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。

inttally = 0;//glable

voidThreadProc()

{

       for(inti = 1; i <= 50; i++)

              tally += 1;

}

 

第三题(某培训机构的练习题):

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

 

第四题(迅雷笔试题):

编写一个程序,开启3个线程,这3个线程的ID分别为ABC,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC.依次递推。

 

第五题(Google面试题)

有四个线程1234。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

A1 2 3 4 1 2....

B2 3 4 1 2 3....

C3 4 1 2 3 4....

D4 1 2 3 4 1....

请设计程序。

 

下面的第六题与第七题也是在考研中或是程序员和软件设计师认证考试中的热门试题。

第六题

生产者消费者问题

这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。

 

第七题

读者写者问题

这也是一个非常经典的多线程题目,题目大意如下:有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者读时写者也不能写。

 


原创粉丝点击