微软对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