并行的一些基本用法

本文介绍并行编程的基本用法,包括多线程集合、锁、信号量等并发控制机制,以及如何使用Parallel类进行并行循环和方法调用。

并行的一些基本用法,非教程类,备忘用的。

private ConcurrentBag<string> _bag = new ConcurrentBag<string>();  //多线程无序集合
private ConcurrentDictionary<int, string> _dictionary = new ConcurrentDictionary<int, string>();  //多线程键值对集合
private ConcurrentQueue<string> _queue = new ConcurrentQueue<string>();  //多线程队列
private ConcurrentStack<string> _stack = new ConcurrentStack<string>();  //多线程堆栈
private Barrier _barrier = null;  //屏障同步 多任务多阶段协同工作
private SpinLock _spinLock = new SpinLock(false);  //自旋锁
private CountdownEvent _ce = new CountdownEvent(Environment.ProcessorCount);
private SemaphoreSlim _ss = new SemaphoreSlim(Environment.ProcessorCount, 50);
private ManualResetEventSlim _mres = new ManualResetEventSlim(false);
private object _object = new object();
public void Example()
{
    Parallel.Invoke(Example1, Example2, Example3, Example4);  //并行执行N个方法,执行顺序是随机的,由CPU决定
    Parallel.For(1, 100, (index, loopState) => 
    { 
        Console.WriteLine("并行执行第{0}次", index);
        if (index > 30)
            loopState.Stop();  //立即中止循环
    });   //并行执行For循环
    List<Product> products = GetProducts();
    Parallel.ForEach(products, (model, loopState) => 
    {
        Console.WriteLine(model.Name);
        if (model.SellPrice > 60)
            loopState.Break();  //执行完当前迭代后再中止循环
    });   //并行执行ForEach循环

    CancellationTokenSource cts = new CancellationTokenSource();  
    Task task = new Task(() =>
    {
        SpinWait.SpinUntil(() => false, 2000);  //自旋2秒(不释放CPU资源等待2秒)
    }, cts);  //新建任务并添加任务取消参数
    task.Status.ToString();  //获取当前任务的状态
    task.Start();  //开启任务
    cts.Cancel();  //通知任务取消,任务取消并不是立即的,有一点的延迟
    Task.WaitAll(new Task[] { task }, 2000);  //等待任务全部结束或超时2秒
    Task<string> taskResult = Task<string>.Factory.StartNew(() => "TanSea");  //任务带泛型参数来接收返回值
    Task.WaitAll(taskResult);
    taskResult.Result.ToString();  //使用Result来获取任务结束后的返回值
    Task continueTask = taskResult.ContinueWith(t => Console.WriteLine(t.Result.ToString()));  //等待任务taskResult结束后执行continueTask任务

    _barrier = new Barrier(Environment.ProcessorCount, b => Console.WriteLine(b.CurrentPhaseNumber));
    _barrier.SignalAndWait();  //所有任务到达屏障后继续
    int number = _barrier.ParticipantsRemaining;  //获取还未到达屏障的任务数量
    bool lockTaken = false;
    _spinLock.Enter(ref lockTaken);  //获取锁
    _spinLock.Exit(false);  //释放锁
    _ce.Signal();  //注册信号量
    _ce.Wait();  //等待所有任务完成
    _ce.Reset();  //重置信号量
    _ss.Wait();  //使用信号量
    _ss.Release();  //释放信号量
    _ss.Release(10);  //释放10个信号量
    _mres.Wait();  //等待直到设置为可用
    _mres.Set();  //设置为可用
    _mres.Reset();  //设置为不可用
}
private void Example1()
{
    Console.WriteLine("我是方法1");
}
private void Example2()
{
    Console.WriteLine("我是方法2");
}
private void Example3()
{
    Console.WriteLine("我是方法3");
}
private void Example4()
{
    Console.WriteLine("我是方法4");
}
private List<Product> GetProducts()
{
    List<Product> result = new List<Product>();
    for (int index = 1; index < 100; index++)
    {
        Product model = new Product();
        model.Category = "Category" + index;
        model.Name = "Name" + index;
        model.SellPrice = index;
        result.Add(model);
    }
    return result;
}

 

转载于:https://www.cnblogs.com/TanSea/p/Parallel.html

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备一定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
综合能源系统零碳优化调度研究(Matlab代码实现)内容概要:本文围绕“综合能源系统零碳优化调度研究”,提供了基于Matlab代码实现的完整解决方案,重点探讨了在高比例可再生能源接入背景下,如何通过优化调度实现零碳排放目标。文中涉及多种先进优化算法(如改进遗传算法、粒子群优化、ADMM等)在综合能源系统中的应用,涵盖风光场景生成、储能配置、需求响应、微电网协同调度等多个关键技术环节,并结合具体案例(如压缩空气储能、光热电站、P2G技术等)进行建模与仿真分析,展示了从问题建模、算法设计到结果验证的全流程实现过程。; 适合人群:具备一定电力系统、能源系统或优化理论基础,熟悉Matlab/Simulink编程,从事新能源、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展综合能源系统低碳/零碳调度的科研建模与算法开发;②复现高水平期刊(如SCI/EI)论文中的优化模型与仿真结果;③学习如何将智能优化算法(如遗传算法、灰狼优化、ADMM等)应用于实际能源系统调度问题;④掌握Matlab在能源系统仿真与优化中的典型应用方法。; 阅读建议:建议结合文中提供的Matlab代码与网盘资源,边学习理论模型边动手调试程序,重点关注不同优化算法在调度模型中的实现细节与参数设置,同时可扩展应用于自身研究课题中,提升科研效率与模型精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值