C# 多线程如何访问同一个数据

C# 使用Monitor类、lock和Mutex类进行多线程同步

  1. 在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁。

  2. 在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、lock关键字和Mutex类。

  3. Monitor和lock用法差不多,都是锁定数据或是锁定被调用的函数。Mutex多用于锁定多线程间的同步调用。

  4. Mutex只能互斥线程间的调用,但是不能互斥本线程的重复调用。运行下面程序,可以看出thread1中waitOne()只对thread2中的waitOne()起到互斥的作用,但是thread1并不受waitOne()的影响,可以调用多次,只是在调用结束后调用相同次数的ReleaseMutex()就可以。

    private void thread1Func()
    {
    for (int count = 0; count < 10; count++)
    {
    mutex.WaitOne();
    TestFunc(“Thread1 have run " + count.ToString() + " times”);
    mutex.ReleaseMutex();
    }
    }
    private void thread2Func()
    {
    for (int count = 0; count < 10; count++)
    {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值