[C#]c#中数据的同步加锁机制

对于数据库中,为数据或是访问数据的函数加锁是常见的,但是在C#中数据的同步加锁机制是什么样呢?

在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、Lock关键字和Mutex类。

其中Lock关键词用法比较简单,Monitor类和Lock的用法差不多。这两个都是锁定数据或是锁定被调用的函数。而Mutex则多用于锁定多线程间的同步调用。简单的说,Monitor和Lock多用于锁定被调用端,而Mutex则多用锁定调用端。

锁定机制最简单的做法就是使用锁定关键字Lock。Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁。它的语法如下:

lock(lockObj)
{
//加锁的代码段,一般是操作共同资源的代码
}

LockObj在这里就是一个锁对象,它可以是任何对象(系统在内存中创建对象时会对每一个对象加上一个锁标志变量来模拟一把“锁”,这个变量的值决定锁开还是锁关,也因此原则上任何引用类型的对象都可以作为锁),它起到我们房门上锁的作用。线程要执行Lock里面的语句之前先要检查一下这把锁是不是锁定状态。如果是锁定状态那么这个线程就只好等待,如果不是锁定状态那么线程就把其置为锁定状态然后操作Lock里面的语句,执行完后退出lock语句时,锁定对象的状态会自动变回非锁定状态。


例如下面程序:由于这种程序都是毫秒级的,所以运行下面的程序可能在不同的机器上有不同的结果,在同一台机器上不同时刻运行也有不同的结果,我的测试环境为vs2005, windowsXp , CPU3.0 , 1 G monery。

程序中有两个线程thread1、thread2和一个TestFunc函数,TestFunc会打印出调用它的线程名和调用的时间(mm级的)&#
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值