Interlocked 类 简单的线程安全操作类
Interlocked.Increment 递增
Interlocked.Decrement 递减
returnvalue = Interlocked.Exchange(ref valuie1, valuie2); // 将 value2 值给 covaluie1unt,然后返回 value1 中原来的值
returnvalue = Interlocked.CompareExchange (ref valuie1, valuie2,valuie3); // value1 与 value3比较,想等,则value2赋值给value1,同时方法返回value1原来的值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ThreadPoolTest { class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.Unicode; //InterLocked //Counter counter = new Counter(); //Thread d1 = new Thread(()=> { // for(int i=0;i<=100;i++) // { // int old=counter.add(); // Console.WriteLine("当前值:"+counter.count+ " add old :" + old); // } //}); //Thread d2 = new Thread(() => { // for (int i = 0; i <= 100; i++) // { // int old = counter.remove(); // Console.WriteLine("当前值:" + counter.count + " remove old :" + old); // } //}); //d1.Start(); //d2.Start(); //测试 Exchange 方法 Counter counter = new Counter(); Thread d1 = new Thread(() => { for (int i = 0; i <= 100; i++) { Random rd = new Random(); int newint = rd.Next(0, 100); // valuie1 value2 int oldint = Interlocked.Exchange(ref counter.count, newint); // 将 value2 值给 covaluie1unt,然后返回 value1 中原来的值 Console.WriteLine("当前值:" + counter.count + " old :" + oldint); } }); Thread d2 = new Thread(() => { for (int i = 0; i <= 100; i++) { Random rd = new Random(); int newint = rd.Next(0, 100); int oldint = Interlocked.Exchange(ref counter.count, newint); Console.WriteLine("当前值:" + counter.count + " old2 :" + oldint); } }); d1.Start(); d2.Start(); //测试 Interlocked.CompareExchange //Counter counter = new Counter(); //Thread d1 = new Thread(() => //{ // for (int i = 0; i <= 100; i++) // { // // value1 value2 value3 // int oldint = Interlocked.CompareExchange (ref counter.count, 1,0); // value1 与 value3比较,想等,则value2赋值给value1,同时方法返回value1原来的值 // Console.WriteLine("当前值:" + counter.count + " old :" + oldint); // } //}); //Thread d2 = new Thread(() => //{ // for (int i = 0; i <= 100; i++) // { // int oldint = Interlocked.CompareExchange(ref counter.count, 0, 1); // Console.WriteLine("当前值:" + counter.count + " old2 :" + oldint); // } //}); //d1.Start(); //d2.Start(); Console.ReadKey(); } static void ThreadProc(Object stateInfo) { Console.WriteLine("Hello from the ThreadPool"); } } public class Counter { public int count = 0; public int add() { int oldcount=Interlocked.Increment(ref count); return oldcount; } public int remove() { int oldcount = Interlocked.Decrement(ref count); return oldcount; } } }