6、多线程 - 用两个线程,一个输出字母,一个输出数字,交替输出 1A2B3C4D...26Z

题目

用两个线程,一个输出字母,一个输出数字,交替输出 1A2B3C4D...26Z

代码示例

using System;
using System.Threading;
using System.Threading.Tasks;

public class NumberLetterPrinter
{
	private AutoResetEvent numberEvent = new AutoResetEvent(true); // 一开始数字线程可以运行
	private AutoResetEvent letterEvent = new AutoResetEvent(false); // 字母线程一开始不能运行

	public void PrintNumber(Action<int> printNumber)
	{
		for (int i = 1; i <= 26; i++)
		{
			numberEvent.WaitOne(); // 等待数字事件
			printNumber(i); // 打印数字
			letterEvent.Set(); // 唤醒字母线程
		}
	}

	public void PrintLetter(Action<char> printLetter)
	{
		for (int i = 0; i < 26; i++)
		{
			letterEvent.WaitOne(); // 等待字母事件
			printLetter((char)('A' + i)); // 打印字母
			numberEvent.Set(); // 唤醒数字线程
		}
	}

	public static void Main(string[] args)
	{
		NumberLetterPrinter printer = new NumberLetterPrinter();

		var numberTask = Task.Run(() => printer.PrintNumber(Console.Write));
		var letterTask = Task.Run(() => printer.PrintLetter(Console.Write));

		Task.WaitAll(numberTask, letterTask);
		Console.WriteLine();
	}
}
posted @   似梦亦非梦  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示