C#多线程锁

背景:再一次测试中用户和我几乎同一时刻(不知道谁先谁后,估计间隔在毫秒级)操作了系统。

用户那边反馈显示的操作日志是我登录的信息。于是开始查找问题。首先排除了全局变量先后操作被覆盖的原因。首先A账户登录,然后换用不同的浏览器登录B账户,然后A账户操作系统,这种情况下根据A的token获取A的身份信息,B的token获取B的token信息,不会出现全局用户信息变量被覆盖的问题。 那么答案就只有一个了,就是A和B同时操作系统,同时使用了用户信息这个全局变量,没错,这个就叫做并发。

下面是利用多线程+锁的方式解决并发。核心思想就是在一定时间内将(5秒)用户全局变量锁住。5秒之后放开。下面是我的代码,如图:

 

lock语句

lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:

Object thisLock = new Object(); lock (thisLock) { // Critical code section }

Monitor 类

当多线程同时用到一个对象时,也会出现和公用代码类似的问题,这时就不能用lock关键字了,需要用到System.Threading中的Monitor类,监视器,其提供了使线程共享资源的方案。其可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下同时只有一个线程可以访问这个对象。使用方法如下:

Object o = new Object();

Monitor.Enter(o);

//当前线程可以操作o对象了

Monitor.Exit(o);

对于任何一个被Monitor锁定的对象,内在中都保存着与它相关的一些信息:

其一是现在持有锁的线程的引用;

其二是一个预备队列,队列中保存了已经准备好获取锁的线程;

其三是一个等待队列,队列中保存着当前正在等待这个对象状态改变的队列的外用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于stm32mp157 linux开发板ARM裸机开发教程3:Cortex-A7 架构与工作模式(连载中)

前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) 针对对FS-MP1A开发板&…

用 ChatGPT 尝试 JavaScript 交互式学习体验,有用但不完美

很好,但还不能取代专家导师,有时还会犯错!ChatGPT 教小狗编程( Midjourney 创作)GPT-4刚刚发布,相较于GPT-3.5,它有显著的增强功能。其中之一是它在更长时间的交互和更大的提示下,能…

Pytorch环境配置 完整流程 从CUDA和cuDNN到Torch安装

目录1. 安装CUDA2. 安装cuDNN3. 安装Pytorch1. 安装CUDA 确认需要的CUDA版本 nvidia-smi 下载CUDA.exe CUDA下载地址 结合自己电脑的情况下载对印度个版本 安装 双击后安装,可以修改安装路径,我安装在了D盘 安装方式选择自定义 全部勾选 这里如果电脑没…

nnAudio的简单介绍

官方实现 https://github.com/KinWaiCheuk/nnAudio; 论文实现: nnAudio: An on-the-Fly GPU Audio to Spectrogram Conversion Toolbox Using 1D Convolutional Neural Networks; 以下先对文章解读: abstract 在本文中&#x…

美国站针对磁铁产品新政策16 CFR 1262详解

近日,亚马逊美国站公布磁铁产品(不包括玩具)的新政策更新公告,公告如下: 公告显示,由于美国消费品安全委员会(US Consumer Product Safety Commission)出台了新的安全规定&#xff…

海王算法(看完不会变成海王)

💧学了海王算法会变成海王吗,它又能解决什么样的问题呢?💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 数据结构与算法专栏的文章图文…

内存池解释及线程池(Linux)实现

1.内存池1.什么是内存池内存池是一种内存分配方式。在真正使用内存之前,先申请分配一定数量的、大小相等的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。使用内存池的优点有&#xff1…

Pyspark_SQL3

Pyspark 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hi…

会声会影2023新版本功能详情讲解

会声会影2023Corel VideoStudio一款功能丰富的视频编辑软件。会声会影2023简单易用,具有史无前例的强大功能,拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。…

【Django 网页Web开发】12. 实战项目:分页组件的封装 面向接口编程(05)(保姆级图文)

目录1. 对象的方式使用分页组件2. 项目结构3. 编写pagination.py3.1 pagination.py3.2 view.py4. bug修改之:url中搜索关键词q和page4.1 构造url的一个雏形4.2 修改我们的分页组件4.3 搜索小bug5. 应用分页组件,几行代码实现用户管理分页5.1 批量创建用户…

『 MySQL篇 』:MySQL 索引相关问题

目录 一 . 认识索引 二. 索引的数据结构 1 . B Tree vs Hash 2 . B Tree vs 二叉树/红黑树 3 . B 树 vs B树 三. 索引的使用 1. 索引分类 2. 索引用法 一 . 认识索引 当我们在查询一本书中的内容时 , 你会选择翻页每一页去查询呢 ? 还是说按照书的目录去找 ? 答案是…

springmvc(一)

SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介 请求与响应 REST风格 SSM整合(注解版) 拦截器 SpringMVC是处于Web层的框架,所以其主要的作用就是用…

微信小程序开发:微信小程序生命周期总结

前言 在微信小程序开发中,关于微信小程序API的使用是必备技能,但是关于微信小程序的生命周期也是首先要了解和掌握的知识点。尤其是现在的前端开发领域,关于前端的各种框架和技术都要会,而且微信小程序的语法就是JS的翻版&#xf…

Java 线程安全

一、什么是线程安全 当多个线程访问共享资源时,每个线程都会各自对共享资源进程操作,导致数据不一致,造成程序不能正确的得到结果,此时需要让多个线程排队访问共享资源,让线程安全,才能保证数据安全的被访问…

Jdk动态代理和Cglib动态代理的区别

一: 前言: 代理模式分为 静态代理 和 动态代理,今天我要讲的是动态代理的两种常见、也是被广泛使用的实现方式-------jdk动态代理 和 Cglib动态代理 二:Jdk动态代理实现分析: 结构示意图如下,我定义了一…

FrIf-FrIf_Transmit发送流程【配置参数FrIfImmediate:立即传输还是解耦传输】和代码分析

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 FrIf_Transmit中的 PDU 的配置的传输模式2 代码分析1 FrIf_Transmit中的 PDU 的配置的传输模式 每当FrIf的上层模块想要请求特定 PDU 的传输时,它都会调用 FrIf_Transmit 函数。调用 FrIf_Transmit的时候传递…

C语言--文件操作

目录前言什么是文件程序文件数据文件文件指针FILE结构的维护文件的打开和关闭文件的打开方式文件的顺序读写fputcfgetcfputsfgetsfprintffscanf文件流 标准输入/输出流sscanf和sprintf前言 在讲文件操作之前,我们先来思考这个问题: 我们为什么要使用文件…

大数据技术之Spark(一)——Spark概述

大数据技术之Spark(一)——Spark概述 文章目录前言一、Spark基础1.1 Spark是什么1.2 Spark VS Hadoop1.3 Spark优势及特点1.3.1 优秀的数据模型和丰富计算抽象1.3.3 spark的特点1.4 Spark 运行环境1.5 Spark运行架构1.5.1 Driver1.5.2 Executor1.5.3 Mas…

Java设计模式-4、适配器模式

适配器模式 在我们的应⽤程序中我们可能需要将两个不同接⼝的类来进⾏通信,在不 修改这两个的前提下我们可能会需要某个中间件来完成这个衔接的过程。 这个中间件就是适配器。所谓适配器模式就是将⼀个类的接⼝,转换成客 户期望的另⼀个接⼝。它可以让原…

【协议】03、深度解剖之HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的标准、约定或者规则的集合,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。使用的默认端口为80端口。浏览器的默认端口也是80端…