在C#中,可以使用线程同步机制来实现两个执行线程之间的握手。一种常用的干净方式是使用 ManualResetEvent 类。
ManualResetEvent 是一个同步基元,它允许一个或多个线程等待,直到收到信号后才继续执行。下面是一个示例代码:
using System;
using System.Threading;
class Program
{
static ManualResetEvent mre = new ManualResetEvent(false);
static void Main()
{
Thread t1 = new Thread(DoWork1);
Thread t2 = new Thread(DoWork2);
t1.Start();
t2.Start();
// 等待两个线程完成工作
t1.Join();
t2.Join();
Console.WriteLine("握手完成");
Console.ReadLine();
}
static void DoWork1()
{
Console.WriteLine("线程1开始执行工作");
// 执行线程1的工作
// 发送信号,通知线程2可以开始工作
mre.Set();
}
static void DoWork2()
{
Console.WriteLine("线程2等待握手");
// 等待线程1发送信号
mre.WaitOne();
Console.WriteLine("线程2开始执行工作");
// 执行线程2的工作
}
}
在上述示例中,我们创建了一个 ManualResetEvent 对象 mre,并将其初始状态设置为 false。线程1开始执行工作后,通过调用 mre.Set() 发送信号,通知线程2可以开始工作。线程2在执行工作前,调用 mre.WaitOne() 等待线程1发送信号。当线程1发送信号后,线程2收到信号,继续执行工作。
这种方式可以确保两个执行线程之间的握手是干净的,即线程2会等待线程1发送信号后才开始执行工作。
推荐的腾讯云相关产品:腾讯云服务器(CVM)- 提供稳定可靠的云服务器实例,支持多种操作系统,满足各类应用场景的需求。详情请参考:腾讯云服务器产品介绍
请注意,以上答案仅供参考,具体实现方式可能因实际需求和环境而异。
领取专属 10元无门槛券
手把手带您无忧上云