多线程3——Parallel、线程取消、线程安全

多线程3——Parallel、线程取消、线程安全

1.Parallel

  // Parallel                Task.Run(() =>                {                    ParallelOptions parallelOptions = new ParallelOptions();                    parallelOptions.MaxDegreeOfParallelism = 5;//控制执行线程数量                                        Parallel.For(0, 50, parallelOptions,( i) =>//输出1~50                    {                        Console.WriteLine($"开始{i+1}");                        Thread.Sleep(500);                        Console.WriteLine($"结束{i+1}");                    });                });

2.线程取消

    try                {                    //线程取消                    List<Task> tasks = new List<Task>();                    CancellationTokenSource cancellationToken = new CancellationTokenSource();                    for (int i = 0; i < 50; i++)                    {                        int m = i;//临时变量“闭包”                         tasks.Add(Task.Run(() =>                        {                            Console.WriteLine($"开始{m + 1}");                            if (m == 10)                                cancellationToken.Cancel();Thread.Sleep(1000);                            if(!cancellationToken.IsCancellationRequested)                                Console.WriteLine($"结束{m + 1}");                        }, cancellationToken.Token));                    }                    Task.WaitAll(tasks.ToArray());                }                catch (Exception ex)                {                    Console.WriteLine(ex.ToString());                }

3.线程安全

a.Interlocked

方法作用CompareExchange()安全比较两个值是不是相等。如果相等,将第三个值于其中一个值交换Decrement()安全递减1,相当于 i--Exchange()安全交换数据,相当于 a = 30Increment()安全递加1,相当于 i++Add()安全相加一个数值,相当于 a = a + 3Read()安全读取数值,相等于int a=b

b.引用System.Collections.Concurrent命名空间

ConcurrentXXX :这些集合是线程安全的,如果某个动作不适用于线程的当前状态,它们就返回false。在继续之前,总是霈要确认添加或提取元素是否成功。不能相信集合会完成任务

ConcurrentQueue<T> 队列、ConcurrentStack<T> 堆栈、ConcurrentBag<T> 包、ConcurrentDictionary<TKey, TValue> 字典、BlockingCollection<T> 集合、BlockingCollection<T> 阻塞式集合

c.加锁 lock

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部