理解计算机系统_并发编程(7)_线程(四):信号量和互斥锁

前言
       

        以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定

引入

        接续理解计算机系统_并发编程(6)_线程(三):线程内存模型和同步问题-CSDN博客,上贴提到了同步问题,这里将用信号量解决同步问题.

信号量概念及描述

        本书原话:这种方法是基于一种叫做信号量的特殊类型变量的.信号量s是具有非负整数值的全局变量.

        ---解读:概念的阐述中常有"这是什么什么类型".信号量类型如下所示

typedef sem_t unsigned int;    //非负整型定义

         

PV操作的过程

        首先本书这块写得挺乱,让人十分费解(不知道是故意翻译得很差还是怎么回事),笔者尝试以时间线穿插概念的形式来理解PV操作.

        1.s是信号量,非负整数

                ---注意:不管什么情况下,s≥0.

         2.P(s)操作.

                a.如果s!=0,则s=s-1并返回.

                b.如果s==0,则调用P(s)操作的当前线程(假设为A)被挂起(注意:此时s不等于-1,仍等于0).这时需要一个V操作来重启被挂起的线程---如果一直没有V操作,有多个线程(如B,C,D)进行P操作,则他们都将被挂起(被阻挡)

                当执行完等待的V操作后,s=1,前面被阻挡的一个线程(假设为A)被重启,再回去执行P操作(刚才线程挂起,P操作并未进行.)将s-1后s=0.线程A得以执行P(s)后的代码,访问共享数据.而其他被阻挡的线程仍被阻挡,直到下一个V操作的到来,重启他们其中的一个.

          3.V(s)操作

                将s加1,即s=s+1;

                如果s=0,线程处于阻塞(或挂机)状态,则操作后s=1并且重启一个被挂机的线程.

PV操作的特点

        1.原子性.

                P(s)和V(s)都是不可分割的,中间没有停顿

        2.V(s)操作不能确定重启哪一个线程.

                 本书原话:当有多个线程在等待同一个信号量时,你不能预测V操作要重启哪一个线程.

                 ---解读:可能有多个线程调用P(s)---尝试访问共享数据,仍没有进行V(s)操作,这时s仍等于0,并且这些线程都处于挂起状态.再进行V(s)操作,可以重启其中一个线程,但不能确定到底是哪个.

        3.信号量不变性.

                 本书原话:P和V的定义确保了一个正在运行的程序绝不可能进入这样一种状态,也就是一个正确初始化了的信号量有一个负值.

                 ---解读:前面说了,不论什么情况下,s≥0.由这一点控制了并发

=============================内容分割线↓===================================

        一句话概括信号量:解决了同步问题.任何时刻只能有一个线程访问共享变量.

=============================内容分割线↑===================================

信号量实现互斥

        关于进度图,笔者选择跳过(原理复杂,代码简单可以选择性忽略)

        理解了信号量的工作原理,互斥也容易理解:P操作是信号量加锁,V操作是信号量解锁.代码

//信号量互斥的代码
volatile long cnt=0;
sem_t mutex;                    
Sem_init(&mutex,0,1);        //初始化信号变量,mutex被赋值为1

for(int i=0;i<niters;i++){
    P(&mutex);                //加互斥锁
    cnt++;                    //操作共享数据
    V(&mutex);                //解互斥锁
}

小结

        信号量的概念以及信号量实现互斥

内容概要:本文围绕虚拟电厂与电动汽车之间的互动关系,采用主从博弈理论构建了二者间的优化决策模型,并引入条件风险价值(CVaR)来衡量管理电力系统中由可再生能源出力不确定性及电动汽车充放电行为带来的风险。通过Matlab代码实现该模型,旨在优化虚拟电厂的调度策略,在保障系统经济性的同时提升其对不确定因素的鲁棒性。研究涵盖了模型构建、算法设计与仿真验证全过程,重点分析了不同风险偏好下虚拟电厂与电动汽车的博弈均衡结果及其对系统运行的影响,深入探讨了主从博弈框架下的决策机制与CVaR在电力金融风险量化中的应用。; 适合人群:具备一定电力系统基础知识Matlab编程能力,从事能源互联网、电力市场、电动汽车调度、风险管理等相关领域研究的研究生或科研人员。; 使用场景及目标:①研究虚拟电厂如何协调管理大量分布式能源与电动汽车资源;②探讨主从博弈在电力市场中的建模方法与求解技巧;③利用CVaR工具量化并控制电力系统运行中的金融或运行风险;④通过Matlab实现复杂优化模型并进行仿真分析。; 阅读建议:此资源结合了博弈论、风险管理电力系统优化等多学科知识,建议读者在学习过程中重点关注模型假设的合理性、CVaR的应用逻辑以及Matlab代码的实现细节,宜配合相关理论教材与案例进行深入理解复现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重庆彭枫

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值