博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# InterLock保证数据一致性
阅读量:5008 次
发布时间:2019-06-12

本文共 1418 字,大约阅读时间需要 4 分钟。

    
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 = 
0; i < 
10000; 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();
        }
    }

转载于:https://www.cnblogs.com/shidengyun/p/5599702.html

你可能感兴趣的文章
mvc性能优化
查看>>
C++学习笔记25:makefile文件2
查看>>
Maven 3 入门 -- 核心概念
查看>>
勾选框图片代替,两张图片进行切换
查看>>
在Windows Mobile和Wince(Windows Embedded CE)下使用.NET Compact Framework进行GPS NMEA data数据分析的开发...
查看>>
thymeleaf-extras-db 0.0.1发布,select标签加载数据的新姿势
查看>>
多线程程序设计的8个规则
查看>>
file 读取方式
查看>>
五、面向对象的应用范围
查看>>
对内存空间的理解
查看>>
Reorder List
查看>>
c 宏的定义
查看>>
log
查看>>
663 如何做“低端”产品?(如何把低端做得高端 - 认同感)
查看>>
JDBC 第九课 —— 初次接触 JUnit
查看>>
Windows核心编程:第10章 同步设备IO与异步设备IO
查看>>
浏览器加载、解析、渲染的过程
查看>>
Redis-cli 命令总结
查看>>
【NOIP 模拟赛】改造二叉树 最长上升子序列
查看>>
【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树
查看>>