C#常用算法:并发集合

微软对C#(4.0)的框架添加了全新的并发编程框架,现在我们也能用C#开发支持并发概念的程序的。在并发编程中最让人烦恼的应该就是如何数据同步:避免脏读和脏写,当然我们可以通过Lock技术来实现,也可以使用微软提供给我们的并发集合,这些集合都提供了TryDo方法。用它们对数据的读/写操作能在TryDo返回True的情况下执行。我们来看看它们吧:

IProducerConsumerCollection

所有的并发集合都实现了这个接口,TryAdd和TryTake分别在读和写的时候判断是否能正常进行,不行则返回false。

public interface IProducerConsumerCollection<T> : IEnumerable<T>, ICollection, IEnumerable
{
    void CopyTo(T[] array, int index);
    T[] ToArray();
    bool TryAdd(T item);
    bool TryTake(out T item);
}

ConcurrentQueue

并发队列,队列类型的数据结构。

public static void ConcurrentQueueTest()
       {
           Parallel.For<Queue<string>>(1, 10000,
               () =>
               {
                   while (strNornalQueue.Count != 26)
                   {
                       if (strNornalQueue.Count == 0)
                       {
                           for (int i = 65; i <= 90; i++)
                           {
                               strNornalQueue.Enqueue(Convert.ToChar(i).ToString());
                           }
                       }  

                   }
                   Console.WriteLine("-------------start------------");
                   return strNornalQueue;
               },
               (index, state, head) =>
               {
                   string tmp = string.Empty;
                   tmp = head.Dequeue();
                   Console.WriteLine(string.Format("The element '{0}' was set by thread {1}", tmp, System.Threading.Thread.CurrentThread.ManagedThreadId));
                   head.Enqueue(tmp);  

                   return strNornalQueue;
               },
               (result) =>
               {
                   Console.WriteLine("-------------end------------------");
               });
           Console.WriteLine(string.Format("current collection has {0} elements, Has duplicate data:{1}", strNornalQueue.Count, IsDuplicate<string>(strNornalQueue.GetEnumerator())));  

           foreach (string item in strNornalQueue)
           {
               Console.WriteLine(item);
           }  

       }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, string
, 微软
, 队列
, console
, C# web 高并发
, WriteLine
集合并发
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2025-01-30 15:53:49

C#常用算法:并发集合的相关文章

C#常用算法:集合

集合类型的数据结构在日常编程中占重要比例,大多数的业务需求都需要用到集合类型的数据结构..NET平台为我们提供了种类繁多的集合类型的数据结构,我们只需要简单的调用相应的API就能完成对零散数据的整理.本文收集了目前.NET平台下为我们提供的所有集合类型,并提供一个小例子. IEnumerable namespace System.Collections.Generic { public interface IEnumerable<out T> : IEnumerable { IEnumerat

并发集合(六)使用线程安全的NavigableMap

使用线程安全的NavigableMap Java API 提供的有趣的数据结构,并且你可以在并发应用程序中使用,它就是ConcurrentNavigableMap接口的定义.实现ConcurrentNavigableMap接口的类存储以下两部分元素: 唯一标识元素的key 定义元素的剩余数据 每部分在不同的类中实现. Java API 也提供了这个接口的实现类,这个类是ConcurrentSkipListMap,它实现了非阻塞列表且拥有ConcurrentNavigableMap的行为.在内部实

php 常用算法和时间复杂度

本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍,需要的朋友参考下   按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3) 复制代码 代码如下: //二分查找O(log2n) function erfen($a,$l,$h,$f){ if($l >$h){ return false;} $m = intval(($l+$h)/2); if ($a[$m] == $f){ r

php计算两个整数的最大公约数常用算法小结

 这篇文章主要介绍了php计算两个整数的最大公约数常用算法,实例总结了求最大公约数的三种常用方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php计算两个整数的最大公约数常用算法.分享给大家供大家参考.具体如下:   代码如下: <?php //计时,返回秒 function microtime_float () { list( $usec , $sec ) = explode ( " " , microtime ()); return ((float)

【阿里云大学课程】机器学习入门:概念原理及常用算法

AlaphaGo与围棋界的较量,吸引了全世界的目光,也让大家见识到了机器学习与人工智能技术的强大之处.你是不是也想学机器学习了? 机器学习是人工智能的一个分支.人工智能的研究是从以"推理"为重点到以"知识"为重点,再到以"学习"为重点,一条自然.清晰的脉络.显然,机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题. 在维基百科中,机器学习有下面几种定义: 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如

JS实现的几个常用算法_javascript技巧

(1)数组去重 原理:定义一个对象obj,然后把数组元素作为obj的属性名,利用属性名是否重复进行判重 var unique = function(arr){ let obj = {}; let newArr = []; arr.forEach(function(x){ if(!obj[x]){ //如果对象中没有该元素对应的属性 obj[x] = true; newArr.push(x); } }); return newArr; } (2)使用快速排序算法对数组进行排序 这里面包括两种效果,

php计算两个整数的最大公约数常用算法小结_php技巧

本文实例讲述了php计算两个整数的最大公约数常用算法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php //计时,返回秒 function  microtime_float () {     list( $usec ,  $sec ) =  explode ( " " ,  microtime ());     return ((float) $usec  + (float) $sec ); } /////////////////////////////////

C#并行编程-并发集合

原文:C#并行编程-并发集合 菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 背景 基于任务的程序设计.命令式数据并行和任务并行都要求能够支持并发更新的数组.列表和集合. 在.NET Framework 4 以前,为了让共享的数组.列表和集合能够被多个线程更新,需要添加复杂的代码来同步这些更新操作. 如您需要编写一个并行循环,这个循环以无序的方式向一个共享集合中添加元素,那么必须加入一个同步机制来保证这是一个线程安全的集合. System.Collenctions

轻松看懂机器学习十大常用算法

通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普. 以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个节点提一个问题,通过判断,将数据分为两类,再继续提