b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

并行线程安全问题

电脑杂谈  发布时间:2020-05-29 10:25:23  来源:网络整理

java 线程repaint问题_webservice 线程问题_线程安全问题代码

废话不多,代码:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ParallelTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Product> products = new List<Product>();
             Parallel.For(0, 1000000, (i) =>
            {
                Product product = new Product();
                product.Name = "name" + i;
                product.Category = "Category" + i;
                product.SellPrice = i;
                products.Add(product);
            });
            
            Console.WriteLine(products.Count);
            Console.ReadLine();
        }
    }
    class Product
    {
        public string Name { get; set; }
        public string Category { get; set; }
        public int SellPrice { get; set; }
    }
}

线程安全问题代码_webservice 线程问题_java 线程repaint问题

猜猜运算结果是999999?对不起线程安全问题代码,结果! = 999999.

线程安全问题代码_webservice 线程问题_java 线程repaint问题

运行结果

Net 4.0引入了System.Threading.Tasks,它简化了我们在不直接处理线程和线程池的情况下进行异步编程的方式,但同时也引入了线程安全性问题.

线程安全问题代码_java 线程repaint问题_webservice 线程问题

System.Threading.Task中的类型称为任务并行库(TPL). TPL使用CLR线程池(表明使用TPL创建的线程都是后台线程)将应用程序的工作自动分配给可用的CPU.

并行是指数据并行性. 它提供的Parallel.For()或Parallel.ForEach()方法可以迭代数组或并行集合中的数据.

webservice 线程问题_线程安全问题代码_java 线程repaint问题

出现此结果的原因显然是由多线程操作的集合引起的线程安全问题.

简而言之,在操作多线程集合时,无论是通过Thread,ThreadPool,Task,Parallel还是PLINQ,我们都必须注意线程安全性问题.

解决方案很简单:

使用并发集合(System.Collections.ConCurrent)锁定

对于这个问题,我知道它有潜在的线程安全性问题,但是我不确定结果如何. 当我截屏并询问没有结果时,我想到了编写演示以验证问题. 这也是我写这篇文章的初衷: 提醒自己,如果遇到问题线程安全问题代码,请不要从头开始猜测,并决心亲自进行验证.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-226333-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...