C#中一道关于多线程的编程题
题目的意思是这样的:让两个线程A和B将自己的ID轮番写入一个文件中,每个线程重复十次写入后执行一个回调函数,说“I'm OK”,就这样。我是一名QA,不是开发,出于兴趣报考了公司的C#课程考试,多线程那些知识我也认真听过课,但是总归没有机会实际运用过,所以一到真正要动手写的时候也就基本等于不会了,最后我想了半天写了这样的一个程序,我感觉也算是符合了题的要求,还望各路大神不吝赐教,我好学习。也多帮我想想办法,应该怎么学习C#,包括反射,匿名方法和Lambda,委托,多线程,数据验证,等等这些知识的实际应用,给我出一些例题,谢谢啦!十分感谢。
以下是我的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
using System.IO; namespace BLevelProgram
{
class BLevelProgram
{
public BLevelProgram()
{
//Constructor
} //静态标识符——记录写入次数.
static int i = ;
static int o = ;
//权利标识符——判断线程是否具有写入权利,默认为true,true为线程1的写入权利,false为线程2的写入权利.
static bool flag = true; public static void Main()
{
//创建文件夹路径.
Directory.CreateDirectory(@"C:\tylan");
Thread.Sleep();
//创建输出文件并关闭.
File.Create(@"C:\tylan\File.txt").Close();
//后台线程a,b轮流向文件交替写入数据.
Thread a = new Thread(kick1);
a.IsBackground = true;
Thread b = new Thread(kick2);
b.IsBackground = true;
a.Start();
b.Start();
//让主线程等待后台线程.
Thread.Sleep();
Console.ReadLine();
} //向文件中写入当前thread的ID.
public static void kick1()
{
for (int c = ; c <= ; c++)
{
//判断线程是否具有写入权利.
while (flag == false)
{
//没有权利的时候就继续等待.
Thread.Sleep();
}
//小于10次写入则继续写入.
if (i < )
{
//输出采取追加模式.
StreamWriter file = new StreamWriter(@"C:\tylan\File.txt", true);
//写一行到文件中.
file.WriteLine(Thread.CurrentThread.ManagedThreadId);
//控制台显示结果.
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
//关闭文件.
file.Close();
//线程a写入次数加一.
i++;
//把写入权利交给线程b.
flag = false;
}
//等于10次就回调.
else
{
//执行线程回调函数.
ThreadCallBack();
}
}
} //向文件中写入当前thread的ID.
public static void kick2()
{
for (int c = ; c <= ; c++)
{
//判断线程是否具有写入权利
while (flag == true)
{
//没有权利的时候就继续等待.
Thread.Sleep();
}
//小于10次写入则继续写入.
if (o < )
{
//输出采取追加模式.
StreamWriter file = new StreamWriter(@"C:\tylan\File.txt", true);
//写一行到文件中.
file.WriteLine(Thread.CurrentThread.ManagedThreadId);
//控制台显示结果.
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
//关闭文件.
file.Close();
//线程b的写入次数加一.
o++;
//把写入权利交给线程a.
flag = true;
}
//等于10次就回调.
else
{
//执行线程回调函数.
ThreadCallBack();
}
}
} //线程回调函数
public static void ThreadCallBack()
{
//在函数中输出"I'm OK.".
Console.WriteLine("I'm OK.");
}
}
}
执行后的结果在控制台输出是:
文件中的输出结果为:
C#中一道关于多线程的编程题的更多相关文章
- C#中一道关于员工信息系统的题(主要考察LinQ和正则表达式验证)
今天上午进行了公司的C# C level考核,最后一道编程题是关于员工信息系统的,题目的要求大概是这样的:1.要可以保存员工信息(XXXXX),并且要用正则表达式对输入信息进行验证:2.要可以对员工信 ...
- C#中一道关于多线程的基础练习题——模拟仓库存销过程
题目:模拟生产.入库.销售(50分) 假设某企业自产.自存.自销,需要将工厂生产的各类产品不定时的运到仓库,与此同时,需要将仓库中的货物运往超市和商场中进行销售,请编写一个程序模拟此过程(主要是存取这 ...
- 一道有趣的javascript编程题
题目:实现以下功能 1. 点击按钮“打开新窗口”,打开新的子页面,要求新窗口的大小为400px X 200px 2. 输入地址信息,点击“确定”按钮,关闭该页面 3. 将子页面中输入的地址信息,回传到 ...
- java多线程编程题之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...
- 记一次面试过程中的Python编程题
这几天面试过程中遇到一道Python编程题,题目如下: 面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字 ...
- POJ C程序设计进阶 编程题#2:字符串中次数第2多的字母
编程题#2:字符串中次数第2多的字母 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536k ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- PTA中如何出Java编程题?
很多第一次出Java编程题的老师,不知道Java在PTA中是如何处理输入的.写一篇文章供大家参考. 有多种类型输入的编程题: 类型1:固定数量输入 从控制台读入**两个**数,然后将其相加输出. 对于 ...
随机推荐
- jsp页面获取集合的长度
createTime--2016年10月12日16:20:02Author:Marydonjsp页面获取集合的长度 在jsp页面与js中不能通过${list.size}取列表长度,而是引入jstl ...
- TOMCAT清理
CreateTime--2017年7月10日08:54:00Author:Marydon 如何清理TOMCAT 方式一:通过tomcat的安装目录进行清理 找到TOMCAT的根目录,如图: 实质: ...
- 【laravel5.4】laravel5.4系列之生成_ide_helper.php文件
在laravle中使用代码自动补全,比较方便开发,于是这边找到了相关的办法 在laravel配置完好的情况下,同时安装好了composer. 进入代码的根目录执行 composer require b ...
- 在win7/8下搭建简易的无线平台
资料:http://www.cnblogs.com/KeenLeung/p/3482073.html http://www.cnblogs.com/KeenLeung/p/3481998.html 其 ...
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口(转)
转自:[CXF REST标准实战系列] 二.Spring4.0 整合 CXF3.0,实现测试接口 文章Points: 1.介绍RESTful架构风格 2.Spring配置CXF 3.三层初设计,实现W ...
- vi中全选的命令或者快捷方式
http://blog.163.com/boby_boke/blog/static/126877354200910308522382/网上有两种说法比较多:“:1,$y”和 “dG” 但是我查到有资料 ...
- OAF_OAF增删改-删除的实现(案例)
2014-06-02 Created By BaoXinjian
- Android广播BroadcastReceiver
Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...
- LevelDB场景分析4--BackgroundCompaction
1.DBImpl::Open uint64_t new_log_number = impl->versions_->NewFileNumber(); WritableF ...
- System V IPC
1.概述 System V IPC共有三种类型:System V消息队列.System V 信号量.System V 共享内存区. System V IPC操作函数如下: 2.key_t键和ftok函 ...