题目的意思是这样的:让两个线程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#中一道关于多线程的编程题的更多相关文章

  1. C#中一道关于员工信息系统的题(主要考察LinQ和正则表达式验证)

    今天上午进行了公司的C# C level考核,最后一道编程题是关于员工信息系统的,题目的要求大概是这样的:1.要可以保存员工信息(XXXXX),并且要用正则表达式对输入信息进行验证:2.要可以对员工信 ...

  2. C#中一道关于多线程的基础练习题——模拟仓库存销过程

    题目:模拟生产.入库.销售(50分) 假设某企业自产.自存.自销,需要将工厂生产的各类产品不定时的运到仓库,与此同时,需要将仓库中的货物运往超市和商场中进行销售,请编写一个程序模拟此过程(主要是存取这 ...

  3. 一道有趣的javascript编程题

    题目:实现以下功能 1. 点击按钮“打开新窗口”,打开新的子页面,要求新窗口的大小为400px X 200px 2. 输入地址信息,点击“确定”按钮,关闭该页面 3. 将子页面中输入的地址信息,回传到 ...

  4. java多线程编程题之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...

  5. 记一次面试过程中的Python编程题

    这几天面试过程中遇到一道Python编程题,题目如下: 面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字 ...

  6. POJ C程序设计进阶 编程题#2:字符串中次数第2多的字母

    编程题#2:字符串中次数第2多的字母 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536k ...

  7. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  8. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  9. PTA中如何出Java编程题?

    很多第一次出Java编程题的老师,不知道Java在PTA中是如何处理输入的.写一篇文章供大家参考. 有多种类型输入的编程题: 类型1:固定数量输入 从控制台读入**两个**数,然后将其相加输出. 对于 ...

随机推荐

  1. html中文乱码问题的解决

    当我试着用html写代码的时候,发现直接保存的文件用浏览器打开时中文显示是乱码的,所以我找了一些解决方法,可是原因不太明白,所以我也就不解释了,能够自己找找原因,以下提供解决方法: 在写的html的第 ...

  2. 【FAI】七日年化收益与万份收益的理解

    七日年化收益:其实指的一年的收益(应该忽略”七日”),这里的七日指的是取最近七日年化的结果 万份收益:每万元每天的收益 可以使用下图来清晰识别: 例子: 10000元按照5%的七日年化收益计算的话: ...

  3. iOS-仿京东6位密码支付输入框

    概述 用于安全支付的密码支付输入框. 详细 代码下载:http://www.demodashi.com/demo/10709.html 开发需求中有时候我们需要用于安全支付的功能, 需要设置APP钱包 ...

  4. MySQL-事务隔离级别设置

    加锁研究:http://www.cnblogs.com/JohnABC/p/4377529.html 先了解下 第一类丢失更新.脏读.不可重复读.幻读.第二类丢失更新 第一类丢失更新 撤销一个事务时, ...

  5. Linux各主要发行版的包管理命令对照

    Linux各主要发行版的包管理命令对照 Debian使用的是apt和dpkg,Gentoo则用的是emerge,Redhat的yum.Suse的zypper.Arch的pacman.Slackware ...

  6. java学习之第五章编程题示例(初学篇)

    /* Animal.java */ package animal; public abstract class Animal { public abstract void cry(); public ...

  7. java第四章编程题(初学篇)

    代码: /* test.java */ package test; public class test { public static void main(String args[] ) { CPU ...

  8. Debian/Ubuntu架设nginx+bugzilla

    题注 最近需要一个简单快速的bug追踪工具,考虑到系统环境以及学习成本,决定采用bugzilla.不试不知道,原来这里面还有这么多的坑需要一个个踩平~,遂随笔一下以备后用. 我采用的系统组成是debi ...

  9. mac下安装mysql 1820 重置默认密码

    mac安装mysql时会给出一个临时密码 记录下来 2018-03-17T02:14:10.809431Z 1 [Note] A temporary password is generated for ...

  10. 怎么修改Elasticsearch的对外ip 默认是本地IP 127.0.0.1

    //修改C:\Program Files\elasticsearch-2.1.1\config\elasticsearch.yml: network.bind_host: 172.16.1.86 pa ...