C#加锁的例程

这篇具有很好参考价值的文章主要介绍了C#加锁的例程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace LockTest
{
class Program
{
static void Main(string[] args)
{
TestLock testlock = new TestLock();
Thread th = new Thread(() =>
{
//模拟死锁:造成死锁,使lock无法释放,在i=5时,跳出死循环,释放lock
testlock.DoWorkWithLock();
});
th.Start();
Thread.Sleep(1000);
Thread th2 = new Thread(() =>
{
//这个地方你可能会有疑惑,但存在这种情况,比如你封装的dll,对其它开发人员不是可见的
//开发人员很有可能在他的逻辑中,加上一个lock保证方法同时被一个线程调用,但这时有其它的线程正在调用该方法,
//但并没有释放,死锁了,那么在这里就不会被执行,除非上面的线程释放了lock锁定的对象。这里的lock也可以理解为一个标识,线程1被锁定的对象
//是否已经被释放,
//如果没有释放,则无法继续访问lock块中的代码。
lock (testlock)
{
// 如果该对象中lock(this)不释放(testlock与this指的是同一个对象),则其它线程如果调用该方法,则会出现直到lock(this)释放后才能继续调用。
testlock.MotherCallYouDinner();
testlock.DoWorkWithLock();
}
});
th2.Start();
Console.Read();
}
}文章来源地址https://www.toymoban.com/news/detail-534200.html

class TestLock
{
    public static readonly object objLock = new object();
    /// <summary>
    ///  该方法,希望某人在工作的时候,其它人不要打扰(希望只有一个线程在执行)
    /// </summary>
    /// <param name="methodIndex"></param>
    public void DoWorkWithLock()
    {
        //锁当前对象
        lock (this)
        {
            Console.WriteLine("lock this");
            int i = 0;
            while (true)
            {
                Console.WriteLine("At work, do not disturb...,Thread id is " + Thread.CurrentThread.ManagedThreadId.ToString());
                Thread.Sleep(1000);
                if (i == 5)
                {
                    break;
                }
                Console.WriteLine(i.ToString());
                i++;
            }
        }
        Console.WriteLine("lock dispose");
    }
    public void MotherCallYouDinner()
    {
        Console.WriteLine("Your mother call you to home for dinner.");
    }
}
}

到了这里,关于C#加锁的例程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 中多线程锁的使用经验

    C# 中多线程锁的使用经验:全局锁,实例锁         private static object _exeLock = new object();        static 静态的是全应用程序的资源。如果在一个类里定义了这样一个锁,你在调用使用这个类的时候,是NEW了一个对象,并把这个对象给了一个静态全局变量中保存。这时这个锁

    2024年03月14日
    浏览(55)
  • C# winform加载yolov8模型测试(附例程)

    第一步:在NuGet中下载Yolov8.Net   第二步:引用  using Yolov8Net; 第三步:加载模型 private IPredictor yolov8 = YoloV8Predictor.Create(\\\"D:\\\\0MyWork\\\\Learn\\\\vs2022\\\\yolov_onnx\\\\best.onnx\\\", mylabel); 第四步:图像预测 var predictions = yolov8.Predict(\\\"D:\\\\MyComputer\\\\Pictures\\\\14.jpg\\\");  预测结果: 完整例程: 链接:ht

    2024年02月11日
    浏览(34)
  • 运动控制-达妙C#开源USB2CAN例程

    C# Can总线资料不多, 达妙USB2CAN入口 http://www.dmbot.cn/forum.php?mod=viewthreadtid=328extra=page%3D1

    2024年02月16日
    浏览(36)
  • 关于FPGA如何快速生成模块的例化模板(实用)

    关于FPGA如何快速生成模块的例化模板(实用) 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 一、引言 在FPGA开发中,最常用的设计方式是 自顶层向下的模块化设计 ,将设计要求分成一个个的子模块,负责实现不通的功能,顶层负责调用这些子模块,并负责子模块之间的

    2023年04月08日
    浏览(38)
  • Mysql加锁过程

    MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运

    2024年02月14日
    浏览(33)
  • MySQL的加锁规则

    学习了MySQL的锁后,知道其有这么多锁,那应该会有些疑惑,这么多锁,究竟我在写sql语句时候用到哪个锁的,什么情况是用什么锁的?在哪里查看该sql语句是用了哪些锁的呢?加锁的规则是什么呢?这篇文章就来解决这些疑惑。 MySQL的默认存储引擎是innodb,而我们常用的也

    2024年03月13日
    浏览(42)
  • (5)(5.2) 解锁和加锁

    文章目录 1 解锁电机 2 加锁电机 解锁飞行器可以使电机开始旋转。在解锁前,确保所有的人、物体和任何身体部位(如手)都远离螺旋桨。然后做以下工作: ! Note 你只能在 Stabilize 、 ACRO 、 AltHold 、 Loiter 和 PosHold 模式下解锁或加锁。你不能在自动模式下解锁你的飞行器。

    2023年04月16日
    浏览(30)
  • linux|进程间通信如何加锁

    进程间通信有一种[共享内存]方式,大家有没有想过,这种通信方式中如何解决数据竞争问题?我们可能自然而然的就会想到用锁。但我们平时使用的锁都是用于解决线程间数据竞争问题,貌似没有看到过它用在进程中,那怎么办?  关于进程间的通信方式估计大多数人都知

    2024年02月02日
    浏览(31)
  • MySQL InnoDB加锁规则分析

    1.  基础知识回顾 1、索引的有序性,索引本身就是有序的 2、InnoDB中间隙锁的唯一目的是防止其他事务插入间隙。间隙锁可以共存。一个事务取得的间隙锁并不会阻止另一个事务取得同一间隙上的间隙锁。共享和独占间隔锁之间没有区别。它们彼此之间不冲突,并且执行相同

    2024年02月04日
    浏览(48)
  • 从根本上理解Synchronized的加锁过程

    作为一个Java开发,对于Synchronized这个并不会陌生,无论是并发编程,还是与面试官对线,Synchronized可以说是必不可少。 在JDK1.6之前,都认为Synchronized是一个非常笨重的锁,就是在之前的《谈谈Java中的锁》中提到的重量级锁。但是在JDK1.6对Synchronized进行优化后,Synchr

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包