C# InterLock保证数据一致性
2024-09-03 07:27:27
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Increment counter");
var c = new Counter();
var t1 = new Thread(() => TestCounter(c));
var t2 = new Thread(() => TestCounter(c));
var t3 = new Thread(() => TestCounter(c));
t1.Start();
t2.Start();
t3.Start();
t1.Join();
t2.Join();
t3.Join();
Console.WriteLine("Total Count:{0}", c.Count);
Console.WriteLine("end Increment"); var c1 = new CounterNoLock(); t1 = new Thread(() => TestCounter(c));
t2 = new Thread(() => TestCounter(c));
t3 = new Thread(() => TestCounter(c)); t1.Start();
t2.Start();
t3.Start();
t1.Join();
t2.Join();
t3.Join();
Console.WriteLine("Total Count:{0}", c1.Count);
Console.WriteLine("end CounterNoLock"); }
static void TestCounter(CounterBase c)
{
for (int i = ; i < ; i++)
{
c.Increment();
c.Decrement();
}
}
class Counter : CounterBase
{
private int _count;
public int Count { get { return _count; } }
public override void Increment()
{
_count++;
}
public override void Decrement()
{
_count--;
}
}
class CounterNoLock : CounterBase
{
private int _count;
public int Count { get { return _count; } }
public override void Increment()
{
Interlocked.Increment(ref _count);
}
public override void Decrement()
{
Interlocked.Decrement(ref _count);
}
}
abstract class CounterBase
{
public abstract void Increment();
public abstract void Decrement();
}
}
最新文章
- gcc与makefile编译 BY 四喜三顺
- C++多态的实现及原理详细解析
- 织梦后台更新,报错DedeCMS Error:Tag disabled:"php" more...
- eclipse+maven+jetty环境下修改了文件需要重启才能修改成功
- 响应式十日谈第一日:使用 rem 设置文字大小
- AngularJS 中的 Promise 和 设计模式
- for_each的各种情况下的使用详解
- C++ Primer 学习笔记_79_模板与泛型编程 --模板编译模型
- Ajax请求访问action推断文件是否存在
- 《JS权威指南学习总结--6.8对象的三个属性》
- jsoncpp第二篇------API
- BZOJ 3550: [ONTAK2010]Vacation [单纯形法]
- Appium--swipe滑动方法
- 调用获取学生信息的接口,保存到excel里面
- less的基本使用
- JNI C反射调用java方法
- MVC 5限制所有HTTP请求必须是POST方式
- PKUWC 2019&;WC 2019爆零记
- RabbitMQ理论
- c# HTML中提取图片地址