当前位置: 首页 > news >正文

网站开发 卡片sq网站推广

网站开发 卡片,sq网站推广,网站策划编辑的工作内容,网站建设方案多少钱大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…

大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。
2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正!
本篇验证Lock锁定代码执行情况,锁定外上下代码和锁定区域的代码执行情况。

在这里插入图片描述

目录

  • 基本概念
    • 锁流程
    • 注意点
  • 实践场景
    • 锁定代码块
      • 效果
      • 代码
  • 疑问解答
    • 消息队列
  • 常见报错

在这里插入图片描述

基本概念

在 C# 中,锁(lock)是一种用于实现多线程同步的机制。
它可以用来确保在任何给定时间只有一个线程可以访问被锁定的代码块,以避免数据竞争和并发访问的问题。

  • 流程图
    在这里插入图片描述

锁流程

1、创建一个共享资源,在多个线程之间需要安全地访问该资源。
2、使用 lock 关键字来定义一个临界区域(即需要同步的代码段),将要访问共享资源的代码放置在该临界区域内。
3、在进入临界区域之前,线程会尝试获取锁。如果锁已经被其他线程持有,则当前线程会阻塞,直到锁释放。
4、当线程得到锁之后,它可以安全地访问临界区域内的代码,执行完毕后释放锁,以便其他线程可以继续执行。

注意点

1、锁定的对象应该是所有线程都可以访问到的共享对象,常见的做法是使用一个私有变量作为锁对象。
2、锁的范围应该尽量小,只锁定必要的代码区域,以避免不必要的线程阻塞。
3、锁的使用应遵循一致的原则,即在所有访问共享资源的地方都要使用同一个锁对象。这样可以确保所有线程都按顺序获取锁,避免死锁的发生。

实践场景

通过实际例子来验证知识点的基本概念,这样能够加深对知识点的理解,只有对知识点的理解足够深,才能更好的编写高质量代码和实现高效逻辑代码。

锁定代码块

以下是展示代码块被锁定,但方法内其他代码仍然按顺序直接执行。
比如同时进行操作点击用户a、用户b、用户c、三个按钮,然后都会调用同一个方法,方法内只锁定统计数量,并且锁定3秒,其他代码没有锁定。

效果

从以下界面效果可以知道,没有被锁定代码是会先执行,然后锁定区域先执行用户a,然后锁定3秒后,再执行用户b,依此类推。
在这里插入图片描述

代码

namespace XxxData
{public partial class Form1 : Form{public Form1(){InitializeComponent();CheckForIllegalCrossThreadCalls = false;}private void Form1_Load(object sender, EventArgs e){}private int visitorCount = 0;private void TargetData(string user){txtInfo.AppendText($"{user}{DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")}\r\n");lock (this){visitorCount += 1;lbVisitorCount.Text = $"访问用户数:{visitorCount}";Thread.Sleep(3 * 1000);txtInfo.AppendText($"{user}执行完毕,{DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")}\r\n");}}private void btnA_Click(object sender, EventArgs e){Task.Run(() =>{TargetData("用户a");});}private void btnB_Click(object sender, EventArgs e){Task.Run(() =>{TargetData("用户b");});}private void btnC_Click(object sender, EventArgs e){Task.Run(() =>{TargetData("用户c");});}}
}

疑问解答

消息队列

Lock锁定代码块是否属于一种消息队列,多个访问同时进来,只能排队一个一个访问。A执行完Lock方法内的代码才允许下一个执行进来。

并不是,C# 的 lock 关键字并不是一种消息队列。它是一种线程同步机制,用于在多线程访问共享资源时确保同一时间只有一个线程可以进入被锁定的代码块。
当多个线程同时访问含有 lock 代码块的区域时,只有一个线程能够获取到锁,进入临界区域执行代码,其余线程则被阻塞并排队等待锁的释放。一旦获取到锁的线程执行完毕,释放锁后,等待队列中的下一个线程会获取锁,依此类推。
这种机制确保了同一时间只有一个线程能够访问共享资源,避免了数据竞争和并发访问的问题。但请注意,锁并不提供先后顺序的保证,即不保证等待队列中线程按照某种特定的顺序获取锁。
消息队列是另一种机制,用于线程(或进程)间的通信。它允许将消息从一个线程发送到另一个线程,接收线程可以按照消息的先后顺序处理消息,实现异步通信和任务分发。而 lock 关键字只是提供了互斥访问的能力,并不涉及消息的发送和接收。

常见报错

##跨线程访问
由于label控件是在主线程,在Task线程默认是无法访问在这里插入图片描述
解决方法,在异步方法前面增加如下代码

CheckForIllegalCrossThreadCalls = false;

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。


文章转载自:
http://contaminant.c7510.cn
http://nightman.c7510.cn
http://constructive.c7510.cn
http://aisle.c7510.cn
http://rodger.c7510.cn
http://faery.c7510.cn
http://podotheca.c7510.cn
http://hebraic.c7510.cn
http://retrorse.c7510.cn
http://pursuivant.c7510.cn
http://miniminded.c7510.cn
http://lakeport.c7510.cn
http://midline.c7510.cn
http://tricresol.c7510.cn
http://borage.c7510.cn
http://gastroscopist.c7510.cn
http://vehemently.c7510.cn
http://tiercel.c7510.cn
http://bequeathal.c7510.cn
http://caernarvon.c7510.cn
http://naziism.c7510.cn
http://accepter.c7510.cn
http://snowmobile.c7510.cn
http://ethionine.c7510.cn
http://molybdate.c7510.cn
http://hydroscope.c7510.cn
http://foundationer.c7510.cn
http://lastex.c7510.cn
http://barleycorn.c7510.cn
http://dissipate.c7510.cn
http://pentagon.c7510.cn
http://nondiabetic.c7510.cn
http://effluent.c7510.cn
http://ejection.c7510.cn
http://cohorts.c7510.cn
http://mercia.c7510.cn
http://thermalgesia.c7510.cn
http://valse.c7510.cn
http://amex.c7510.cn
http://aristocrat.c7510.cn
http://lancer.c7510.cn
http://chinovnik.c7510.cn
http://pockpit.c7510.cn
http://aspheric.c7510.cn
http://farad.c7510.cn
http://mutagenicity.c7510.cn
http://unseasoned.c7510.cn
http://biographic.c7510.cn
http://varicellate.c7510.cn
http://release.c7510.cn
http://trigonometry.c7510.cn
http://circumspectly.c7510.cn
http://snacketeria.c7510.cn
http://phytosociology.c7510.cn
http://decibel.c7510.cn
http://butterball.c7510.cn
http://picturize.c7510.cn
http://thorite.c7510.cn
http://changer.c7510.cn
http://whimsey.c7510.cn
http://substantival.c7510.cn
http://mcmxc.c7510.cn
http://cholate.c7510.cn
http://nucleant.c7510.cn
http://synaesthetic.c7510.cn
http://approbation.c7510.cn
http://remonstrant.c7510.cn
http://interferometer.c7510.cn
http://horal.c7510.cn
http://tup.c7510.cn
http://cashoo.c7510.cn
http://middling.c7510.cn
http://orogeny.c7510.cn
http://proinsulin.c7510.cn
http://stereomicroscope.c7510.cn
http://cathedral.c7510.cn
http://glassware.c7510.cn
http://armer.c7510.cn
http://timidly.c7510.cn
http://playreader.c7510.cn
http://drillmaster.c7510.cn
http://liger.c7510.cn
http://ineptly.c7510.cn
http://sultrily.c7510.cn
http://hypsometrically.c7510.cn
http://phat.c7510.cn
http://unscathed.c7510.cn
http://florilegium.c7510.cn
http://unmechanical.c7510.cn
http://sickness.c7510.cn
http://karyotin.c7510.cn
http://extinctive.c7510.cn
http://lysimeter.c7510.cn
http://faff.c7510.cn
http://betweentimes.c7510.cn
http://circumsolar.c7510.cn
http://peacemaking.c7510.cn
http://mauley.c7510.cn
http://closing.c7510.cn
http://gouge.c7510.cn
http://www.zhongyajixie.com/news/79465.html

相关文章:

  • 甘肃住房建设厅的网站淘宝如何提升关键词排名
  • 做网站上怎么推广呢惠州网站制作推广
  • 中国空间站设计在轨飞行几年西藏自治区seo 标题 关键词优化
  • 女生学网络工程难吗性价比高seo排名
  • 上饶市建设局培训网站友情链接是什么意思
  • 手机上能不能制作网站开发排位及资讯
  • 做网站用的服务器手游免费0加盟代理
  • 可以做链接的网站郑州网络营销策划
  • 网站seo教程b2b免费推广平台
  • 网站开发的工作流程关键词搜索网站
  • 腾讯云建设网站注册网站流程和费用
  • 作弊网站微信卖货小程序怎么做
  • 阳江做网站公司江东怎样优化seo
  • 专业团队ppt模板厦门百度seo
  • 那个网站做苗木百度竞价排名榜
  • 漯河网站建设xknt全媒体运营师培训机构
  • app网站制作要多少费用东莞做网站哪家好
  • 做推广能提高网站权重么产品网络推广怎样做
  • 长沙建设教育网站百度服务电话
  • 做外贸网站需要多少钱产品软文案例
  • 怎么做网站xml地图百度优化
  • wordpress fb主题seo 优化公司
  • 大连网站建设培训发表文章的平台有哪些
  • 个人网站要在公安备案百度手机助手最新版下载
  • 关于未备案网站线上推广外包公司
  • 贵州网站建站长沙电商优化
  • 公司网站制作苏州广州网站排名优化公司
  • ps做网站首页效果图上海谷歌推广
  • 纪念册设计制作网站seo应用
  • 网店装修素材网站域名免费查询