首页 > 其他分享 >.net中如何证明List<int>是线程非安全的

.net中如何证明List<int>是线程非安全的

时间:2023-08-14 17:36:26浏览次数:42  
标签:Console list List 安全 线程 toCount net

 

  我们可以通过以下代码来验证 List<int> 为何是线程非安全的,执行以下代码,然后查看输出结果。 

 

 static void Main()
    {

        var toCount = 100;
        #region list线程非安全
        var list = new List<int>();
        // 并行添加元素
        Parallel.For(0, toCount, i =>
        {
            list.Add(i);
        //Thread.Sleep(10);

        });
        Console.WriteLine($"list count {list.Count}");
        #endregion
        Console.ReadLine();
    }

 

使用  Parallel.For  来并发添加元素,执行数次之后发现输出的都为100,看起来似乎没有什么问题。


但是增加   Thread.Sleep(10);  这一行,目的是为了 增加多个线程同时 修改共享资源的概率。

再次运行,发现list只增加了89个元素。

这说明 List<int>是 非线程安全的。

 

标签:Console,list,List,安全,线程,toCount,net
From: https://www.cnblogs.com/xieweikang/p/17629185.html

相关文章

  • C#.NET实现大文件上传
    ​ ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Butt......
  • 聊聊 Java 虚拟线程
    转载:https://www.modb.pro/db/633787Java虚拟线程(VirtualThreads)是Java平台上的一个新特性,它们是一种轻量级的执行上下文,可以更高效地利用CPU资源,提高程序的并发性能。在本文中,我们将探讨Java虚拟线程的概念、设计原理、使用场景以及与传统线程的比较等方面。什么是Java......
  • ASP.NET Core中路由规则匹配
    RESTful约束,如果在一个控制器里面有多个Get、Post...的操作1、在一个控制器里面可以定义多个API方法2、通过路由规则来区分///<summary>///获取用户信息///</summary>///<paramname="user"></param>///<returns></returns>[HttpGet]publicUserGetUser(){//...}GetUs......
  • .NET实现大文件上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • NET web api 利用NPOI 读取excel
    安装NPOI`[HttpPost("users/upload")]publicasyncTaskUpload(IFormFilefile){if(file==null||file.Length==0)returnthis.BadRequest("文件未来上传");varapi_result=newList<string>();//文件......
  • 汪文君->多线程教程
    汪文君-多线程教程第一阶段多线程介绍多线程编程入门多线程创建与启动以及线程状态Runnable接口详细详解线程优先级以及守护线程详解线程同步线程间通讯线程组详解自运行对象详解线程异常回调线程池详解等待线程完成任务阻塞io和多线程详解如何优雅的结束线程自定......
  • Net7配置跨域和部分跨域支持
    跨域策略应该不算陌生,是浏览器的同源策略做的限制,下面基于后端开发来完成跨域的配置和策略一:全局跨域支持///<summary>///跨域///</summary>publicstaticclassCorsExtension{///<summary>///配置跨域策略///</summary>///<paramna......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都可......
  • Net7中Swagger增加注释
    Swagger增加注释其实很简单右键项目,属性勾选文档文件即可 然后代码配置路径:ApiVersions是版本,可以忽略并写死services.AddSwaggerGen(option=>{foreach(varversionintypeof(ApiVersions).GetEnumNames()){option.SwaggerDoc(version,newOpenApi......