前一篇(对比):c#-线程实验-用状态+循环控制线程
说明
// 这里暂停。那么什么时候回继续执行呢?
myThread.Suspend();
//Thread.Sleep(1000 * 3 * 10);
/*
while (true) {
if (fun1_end && fun2_end) {
break;
}
}
*/
//Thread.CurrentThread.Resume();
Console.WriteLine(num);
// 这里发现两个线程都已经计算完了,那么主线程继续执行
if (fun1_end && fun2_end)
{
myThread.Resume();
}
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApp4
{
class Program
{
static int num=0;
static bool fun1_end = false;
static bool fun2_end = false;
static Thread myThread;
static void Main(string[] args)
{
myThread = Thread.CurrentThread;
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("hello word\n");
var thread1 = new Thread(fun1);
var thread2 = new Thread(fun2);
thread1.Start();
thread2.Start();
Thread.CurrentThread.Suspend();
//Thread.Sleep(1000 * 3 * 10);
/*
while (true) {
if (fun1_end && fun2_end) {
break;
}
}
*/
Console.WriteLine(num);
Console.ReadKey();
}
static void fun1() {
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(Thread.CurrentContext.ToString());
for (int i=0;i<10;i++) {
Thread.Sleep(1000);
num++;
}
fun1_end = true;
if(fun1_end && fun2_end)
{
myThread.Resume();
}
}
static void fun2()
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(Thread.CurrentContext.ToString());
for (int i = 0; i < 10; i++){
Thread.Sleep(1000);
num++;
}
fun2_end = true;
if (fun1_end && fun2_end)
{
myThread.Resume();
}
}
}
}
运行结果

本文探讨了一段C#代码,该代码通过状态和循环控制线程的执行。在main线程中,使用`Suspend()`方法暂停,并在两个辅助函数`fun1`和`fun2`完成后通过检查状态来恢复执行。每个辅助函数内部包含一个循环,通过`Sleep`模拟计算过程并更新共享变量`num`。当两个函数都完成计算后,主线程恢复执行。此示例展示了线程同步和控制的基本概念。
625

被折叠的 条评论
为什么被折叠?



