namespace ConsoleApplication1
{
class Program
{
private static object locker = new object();
private static int number = 0;
private static Thread t1;
private static Thread t2;
/// <summary>
/// 加锁示例
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
t1 = new Thread(makenumber);
t2 = new Thread(makenumber);
t1.Start();
t2.Start();
}
private static void makenumber()
{
while (true)
{
Console.WriteLine("T1线程状态" + t1.ThreadState);
Console.WriteLine("T2线程状态" + t2.ThreadState);
lock (locker)
{
number += 100;
Console.WriteLine("线程加锁");
Thread.Sleep(1000);
Console.WriteLine(number);
}
}
}
}
}
加锁的效果是只能一个线程访问变量,当一个线程在访问变量时,另一个线程就是waitsleepjoin状态。
本文提供了一个使用C#编写的简单线程加锁示例。通过创建两个线程并利用lock指令确保对共享资源number的安全访问,演示了如何防止竞态条件。当一个线程在修改number时,另一个线程将处于等待状态。
703

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



