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

网站上传不了图片是什么原因律师网站维护

网站上传不了图片是什么原因,律师网站维护,Wordpress哪个模板最快,天津快速建站模板大家好,我是全栈小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://www.yayakq.cn/news/995566/

相关文章:

  • 小企业网站建设设计网站内链设置
  • 简述网站建设的无锡市新区建设环保局网站
  • php网站建设案例科技网站备案
  • 建设网站方法有哪些内容建设工程国检中心网站
  • 信誉好的做网站个人网站怎么做 简历
  • 网站名称有哪些深圳网站设计x
  • 如何做网站上抓视频网站建设与网络编辑综合实训课程指导手册
  • 什么是网站开发中的分页网站源码上传完后怎么做
  • 网站制作深圳做网站导航菜单
  • 网站建设如何切图网页制作正版网站
  • 团购网站案例公司网络
  • 大连网站建设网站开发 兼职挣钱吗
  • 郑州做网站推著名网站有哪些
  • WordPress微说电子商务seo是什么
  • 学校网站样式广州网页设计招聘
  • 网站开发体系wordpress响应式
  • 商城网站的psd模板免费下载学校自己做的网站需要买服务器吗
  • 网站开发前端和后端怎样创建网站域名平台
  • 网站查询ip解析安徽振兴集团网站开发
  • 建设好网站如何上传百度云南网络营销seo
  • 高明网站设计收费网站建设公司一般多少钱
  • 织梦网站做网站销售好累
  • 企业公共服务平台网站建设方案免费一键生成详情页
  • oss可以做网站根目录吗杭州企业网站建设方案
  • 河北远策网站建设wordpress弹
  • 福建微网站建设多伦网站建设
  • 重庆江北区网站建设怎样在网上做网站
  • 自助网站建设哪个好西班牙语网站设计哪家好
  • 深圳网站制作台wordpress支持HTML么
  • 网页设计难还是网站建设南一般网站用什么软件做