一个多线程的面试题
2013-02-28 23:00
169 查看
面试题的大意是:启动三个线程,分别打印A、B、C,每个打印十遍,打印的顺序为ABCABCABC...
我的思路是用了线程同步技术中的事件ManualResetEvent事件,用到方法有
Set 将事件的状态设置为终止状态,允许一个或多个等待的线程继续
Reset 将事件的状态设置为非终止状态,导致线程阻止
WaitOne 阻止当前线程,直到当前 WaitHandle收到信号
代码如下,如有不足之处,敬请指教,再次多谢。
我的思路是用了线程同步技术中的事件ManualResetEvent事件,用到方法有
Set 将事件的状态设置为终止状态,允许一个或多个等待的线程继续
Reset 将事件的状态设置为非终止状态,导致线程阻止
WaitOne 阻止当前线程,直到当前 WaitHandle收到信号
代码如下,如有不足之处,敬请指教,再次多谢。
static ManualResetEvent manA; static ManualResetEvent manB; static ManualResetEvent manC; static void Main(string[] args) { manA = new ManualResetEvent(false); manB = new ManualResetEvent(false); manC = new ManualResetEvent(false); Thread threadA = new Thread(MethodA); threadA.Start(); Thread threadB = new Thread(MethodB); threadB.Start(); Thread threadC = new Thread(MethodC); threadC.Start(); Console.ReadLine(); } private static void MethodA() { for (int i = 0; i < 10; i++) { Console.Write("A"); manB.Set(); //终止manB事件,启动一个或多个线程 manA.Reset(); //更改manA事件状态为非终止状态,并阻止 manA.WaitOne(); //阻止线程,等待WaitHandle的信号 } } private static void MethodB() { manB.WaitOne(); for (int i = 0; i < 10; i++) { Console.Write("B"); manC.Set(); manB.Reset(); manB.WaitOne(); } } private static void MethodC() { manC.WaitOne(); for (int i = 0; i < 10; i++) { Console.Write("C"); manA.Set(); manC.Reset(); manC.WaitOne(); } }
相关文章推荐
- 一个java多线程面试题
- 一个关于多线程的面试题,网上大多给了错误的答案
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- Linux一个多线程的面试题
- Linux一个多线程的面试题
- Linux一个多线程的面试题
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值(待更新)
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值
- 多线程:自动释放池(含一个经典面试题)
- 迅雷面试题 多线程编程,开启三个线程每个线程输出一个字符
- 28. 微软面试题:使用多线程实现一个队列
- 一个关于多线程的面试题,网上大多给了错误的答案
- 秒杀多线程第一篇 多线程笔试面试题汇总
- 15个顶级Java多线程面试题及回答
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- 一道多线程面试题-C语言实现
- 【java】java面试题经典汇总,包括并发多线程
- 一个简单的面试题
- 一个C#的多线程例子
- 面试题:产生一个长度为100的数组,为数组中的每一项随机填充1-100之间的数并且保证不重复