线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况,这里最简单的办法就是加锁。

加锁的方式常用有两种

第一种:

private object _sign = new object();
lock (_sign)
{
}

第二种:


private Mutex _resolverBufLock = new Mutex(); 
//加锁
_resolverBufLock.WaitOne();
//解锁
_resolverBufLock.ReleaseMutex();


测试程序:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace LockTest
{
public class LockClass
{
private object _sign = new object();
private string _threadId;
public void Test(string threadId)
{
_threadId = threadId;
lock (_sign)
{
Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId.ToString() + " _threadId:" + _threadId + "第一层锁");
Random random = new Random();
Thread.Sleep(random.Next(1000,2000));
lock (_sign)
{
Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId.ToString() + " _threadId:" + _threadId + "第二层锁");
Thread.Sleep(random.Next(1000, 2000));
}
}
}
}
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace LockTest
{
class Program
{
private static LockClass lockClass = new LockClass();
static void Main(string[] args)
{
Thread t1;
Thread t2;
Thread t3;
t1 = new Thread(SetInfo1);
t2 = new Thread(SetInfo2);
t3 = new Thread(SetInfo3);
t1.Start();
t2.Start();
t3.Start();
}

public static void SetInfo1()
{
while (true)
{
lockClass.Test(Thread.CurrentThread.ManagedThreadId.ToString());
}
}
//偶数线程
public static void SetInfo2()
{
while (true)
{
lockClass.Test(Thread.CurrentThread.ManagedThreadId.ToString());
}
}

public static void SetInfo3()
{
while (true)
{
lockClass.Test(Thread.CurrentThread.ManagedThreadId.ToString());
}
}

}
}