操作系统 汤小丹课后习题,第四章18-20

目录

请问我该如何判断什么时候该加锁,什么时候不该加吗?

 

其实我认为它的参考答案跟我的思路没有好大的区别,比我写的更加严谨一些吧,但是也没有严谨到哪里去 

semaphore

 

 

 

 这里孩子还是要加锁的

根据题目描述,我们需要使用信号量来实现爸爸、儿子和女儿之间的同步。考虑到儿子和女儿取水果的操作可以并发进行,不需要添加额外的锁。

下面是使用信号量实现的伪代码:

Semaphore dadSem = 1; // 控制爸爸放水果的信号量
Semaphore sonSem = 0; // 控制儿子取橘子的信号量
Semaphore daughterSem = 0; // 控制女儿取苹果的信号量
Semaphore mutex = 1; // 互斥信号量,用于保护盘子的访问

process Dad() {
    while (true) {
        // 爸爸生成一个水果,假设为苹果
        SemaphoreWait(dadSem);
        SemaphoreWait(mutex);
        // 向盘子中放入苹果
        PutAppleIntoPlate();
        SemaphoreSignal(mutex);
        SemaphoreSignal(sonSem); // 可以通知儿子可以取橘子了
    }
}

process Son() {
    while (true) {
        SemaphoreWait(sonSem);
        SemaphoreWait(mutex);
        // 从盘子中取出橘子
        TakeOrangeFromPlate();
        SemaphoreSignal(mutex);
        SemaphoreSignal(dadSem); // 可以通知爸爸可以放水果了
        EatOrange();
    }
}

process Daughter() {
    while (true) {
        SemaphoreWait(daughterSem);
        SemaphoreWait(mutex);
        // 从盘子中取出苹果
        TakeAppleFromPlate();
        SemaphoreSignal(mutex);
        SemaphoreSignal(dadSem); // 可以通知爸爸可以放水果了
        EatApple();
    }
}

下面是一个判断加锁条件的判定依据说明:

请问我该如何判断什么时候该加锁,什么时候不该加吗?

在多线程或多进程编程中,决定何时需要使用锁(互斥量)来保护共享资源取决于两个关键因素:

  1. 共享资源:首先需要确定哪些数据或资源是多个线程或进程共享的。只有当多个线程或进程同时访问或修改同一资源时,才需要考虑加锁。

  2. 并发访问:其次需要考虑并发访问的情况。如果多个线程或进程在同一时间可能会同时访问或修改共享资源,那么就需要使用锁来确保对共享资源的互斥访问。

基于以上两个因素,可以确定何时需要加锁:

  1. 当多个线程或进程需要同时访问或修改同一共享资源时,需要使用锁来保护该资源。

  2. 当并发访问可能导致数据竞争或不一致的结果时,需要使用锁来确保同一时间只有一个线程或进程访问共享资源。

另外,需要注意的是,加锁会引入一定的开销和同步机制,可能会降低并发性能。因此,在设计并发程序时,应该尽量减少对共享资源的竞争,避免不必要的锁使用,同时也要考虑避免死锁和饥饿等并发问题。

综上所述,判断何时该加锁主要依赖于共享资源和并发访问的情况,需要仔细分析设计,并根据具体情况确定是否需要使用锁来保护共享资源。

为什么有些题目写main,有些又不写呢?

感觉自己的答案跟参考答案越来越像了

 

嵌入式推荐书籍

压力如果太大的话,真的会让人万劫不复

但是如果你真的在一个压力山大的环境当中,你真的会有心情思考这些内容吗?

01

出国留学开启的逆袭人生

在当年,出国这个选择于我来说,其实是个备胎。

我本科学的是金融保险,研究生想考金融。那时候我想考的研究生学校,应届生录取率是10比1。啥意思?也就是说,以我微薄的脑力,有很大的概率要搭上两三年的时间全职复习才能考上。

开玩笑!吓唬谁呢?好歹咱高考也考上中国人民大学了,这样的挑战我当然……觉得完全不值啊!大好青春,花两三年在自习室里去刷题背书?

我虽然那时候职场觉悟低,但幸好对自己还有底线。

可是,不考研,那干嘛?

放眼望去,无非找工作和出国两条路。可是这两条路无论走哪条,我都已经稳稳的输在了起跑线上。我身边那些一心想毕业就工作的同学,早早的就攒了大把杠杠的实习,金灿灿的简历闪的我根本睁不开我的狗眼。那些一心想出国的同学呢,都保持着足够保研的GPA,外企实习也早就拿下了,还有论文拿得出手,优秀的我都不好意思跟人家打招呼。

思来想去,想起了俺娘的话:没有硕士学历怎么行?!…(此处省略一万字具体论述)于是,我在大三结束的暑假,慌忙把陈文灯数学突击班退了,捏着钱出门右转直接报了GMAT。一切就这样匆忙狼狈的开始。

我后悔没有早做计划,后悔没有早想明白,后悔大学前3年浑浑噩噩无所事事的过。人无远虑必有近忧,生于忧患死于安乐,说的就是我。

我发誓,出国读研究生,我不要再这么活。

02

GMAT让我对留学好感陡增

在着手开始准备GMAT不久之后,我开始朦胧的意识到我可能误打误撞选对了路。

对比过考研考试,GMAT是我漫长的学生生涯里遇到的设计最科学合理,最能让我惺惺相惜的考试。

因为GMAT不是为了筛人而设计,而是需要什么技能考什么技能。

GMAT可以理解为西方商学院的入学资格考试,但人家不考什么线性代数马哲毛概思修这些现实商业运作中八辈子用不上的。现实商业运作最需要什么技能?逻辑推理能力,清晰的语言表达能力,对数字的敏感度,(不依赖词汇量堆砌的)快速阅读学习的能力。

好巧不巧,人家GMAT就考这些。

所以我在准备考试的时候,真的觉得学到了本领。注意,不是知识(knowledge),是本领(skills)。

阅读不是猜(有标准答案的)中心思想,而是锻炼速读能力和快速领会逻辑大意的本领。这个本事在之后读英文新闻的时候格外有帮助。

逻辑不是脑筋急转弯,而是训练你思维缜密,根据信息做出合理的推断。做投资这个本事很重要啊,投资点子如果逻辑有缺陷,你得能判断出来,知道哪里应该提问题,哪里应该再收集数据佐证或反驳。

写作也不用挤优美句式,毕竟商务邮件不是情书,重要的是结构清晰,思路明确,言简意赅。

所以你一场考试准备下来,走出考场那一瞬间,没有那种一按钮知识全部被冲下马桶的虚无感,感觉自己技能 get 装备升级离吃上鸡更进一步了,这个体会很新奇。

我对出国读书的好感陡然增加了。

03

留学需要你主动走出舒适圈

择校,文书,网上申请,各种折腾。申请的几所美国的学校都让人兴奋不起来。倒是被一张某学校网站上的芝加哥夏天的湖景照惊艳了,再加上一点点微薄的奖学金,我大笔一挥签了字,就这样把自己未来的10年交给了这个除了公牛队之外我一无所知的城市。

刚来美国的时候,感觉是在旅游,不是来读书的。

下飞机的时候,来接我们的是两个在美国生活多年的中国师兄。我们坐上他们的车,发现车上放的歌居然是SHE…路上师兄接了个电话,直接怼北京话…说带我们去吃饭,然后就熟门熟路的去了中国城。我记得我当时有点蒙,这跟我想象中的完全西化了的中国话都说不利落了的华侨的形象差的实在是有点远……我甚至有种还在中国的错觉。

后来呆久了,才知道这是很正常的。美国就是这样一个多元化的国家,每个人都可以有自己的圈子,不需要去迎合所谓的“主流”,甚至连英文都不是必须的。在芝加哥的中国城,通用语言是粤语。只要你会粤语,即使你不会英文,在中国城还是可以活的悠哉游哉的。

为什么想分享这个感受?

因为想给那些以为来了美国“英文自然就好了,呆久了自然就融入了”的童鞋泼一盆冷水。尤其当你去了一所放眼望去乌央乌央都是中国面孔的学校,你如果不去选择跨出 comfort zone,你的生活可以跟在中国没什么区别。除了上课听的是英文以外,你可以像在国内一样足不出户的网购韩剧游戏,玩腻了还可以找室友火锅趴狼人杀。

你选择美国,因为它的包容和多元化。但如果你指望这个“包容和多元”的环境推着你走,那它只会尊重你“原地踏步”的选择。

04

讨来的实习

还记得我十分失败的大学规划吧?憋着一股劲的我想在研究生扳回一轮。看准了两年后即将毕业,我把目标牢牢锁定在了找到一个暑期实习这件事上。

找实习需要一份过硬的简历。我当时的简历如同中年秃顶般稀稀疏疏没几行字,还都是在中国的经历,拿去找实习实在是辣眼睛。我当时就想简历上一定要有一份在美国的工作,哪怕它只是一份图书馆管理员之类的在校工作,至少我要让我的简历里最上面的一项经历的地点写着芝加哥。

很快,我找到了我的的第一份校内工作。这个机会不是我网上申请申来的,是我自己讨来的。

当时我听说有个金融系的教授在做一个研究项目,如饥似渴的我看到了机会:送上门的免费劳动力帮他做研究他总不能说 no 吧?然额,我是不认识这个教授的,那学期也没有选他的课(囧),那肿么办?狡黠的我打听到了他上课的教室,等到他的课快结束的时候,蹲在教室门口堵他,他一下课就冲了上去。

现在想想我其实还挺有做高利贷逼债的天赋的。

我简单做了下自我结束,之后就劈头盖脸告诉他我有多么义无反顾的想免费给他打工参与他的研究项目。估计他也没见过几个这个架势的,被我的美貌和诚意打动,就让我去他办公室聊。果然!他是缺人手的,于是我就成为了他的 research assistant。

当时我不知道,这个自己讨来的 research assistant 的工作,成为了后来在美国找到工作练成线的第一个dot。

你可能说,又不是什么大公司,连工钱都不给的免费校内工作你也好意思放在台面上讲?

首先,给不给工钱简历上都是 Research Assistant of Professor XXX,又确实是真的参与了,你不说谁知道哪个是正式的哪个是义务的?

第二,再牛叉的人都有个起点吧,拼不起爹的有几个是真的第一份工作就能又光鲜又体面赚的又多?当你有好多选择的时候,你才有资格挑;当你还什么都没有的时候,找个机会就踏实做,就是最好的策略。

一次无意中,我听到了一个人大同班同学在芝加哥找到了实习的消息,赶紧打电话去讨教。他告诉我他也不是生投出来的,而是有目的的筛选了 10 几家他最感兴趣的公司,找到公司精算部门的负责人的联系方式(他是学精算的),一个一个发邮件,因此拿到了 4-5 个面试,其中一个给了暑期实习的 offer。

唉?原来还可以有这种操作啊?生撩陌生人原来这么有效啊!那我也可以啊!

可是到哪去找公司联系人的联系方式呢?

这时候,那个已经被我抛在脑后的 CFA Society of Chicago 突然被我想起来了。这个组织除了搞业界活动之外,还给所有会员提供一个会员联系列表,包括姓名,公司和邮箱地址。我开始研究这个名单,挑出了在我感兴趣的公司工作的,还有看起来是中国人名字的会员,大概三四百人的样子吧,开始毫无人性的大规模群发邮件的攻势。

但是当年效果如何呢?如你想象,95%的人都…完全没有任何回应。

还真的收到过几个没有任何征兆的电话面试,接电话时大脑一片空白,介绍自己的时候连简历上写了什么都记不起来了(所以后来我开始在兜里常年揣着自己的简历,大脑一片空白了至少能扫两眼),问了两遍对方到底哪个公司也没听清楚,也不好意思再问第三遍。总体来说从头到尾懵圈,挂了电话就知道今生缘分已尽。

所以,你问怎么提高面试?我说你去看哪本书哪个网站,都不能解决问题。真的要去不断面,不断失败,才是最有效的。因为真的失去过,丢过人,你才会憋着一股气的去开始想怎么提高

04

为了拿下一份心仪的实习

我!拼!了!

群发邮件一个多月以后,我的转机终于来了。

我收到了一封来信,公司是芝加哥很大的一家金融公司,部门不详,工作内容不详,这个经理说他们部门正在考虑招一个实习生,做XX产品,问我感不感兴趣。

我屁颠屁颠的回复了,之后几天都没下文。不过经历了之前那些失败的电话面试,这回我学精了,知道 HR 的电话随时都可能来,于是开始紧锣密鼓的准备。这回兜里随时装着的不止简历了,还有各种常见面试问题和自己写下来的回答。那几天没干别的,就对着镜子不断练习,觉得说着别扭就上网查查有没有更好的说法,看看有没有类似的范文可以借鉴,好像还找了 Career Services 的老师给做了次 Mock Interview。

一个星期之后,我果然接到了 HR 的电话。手还是抖的,但是这次回答的靠谱多了,挂掉电话之后第一次有了可能还有戏的劫后余生感。第二天,我就收到了 HR 的 on-site 面试邀请,时间在一个星期后。

那时候已经是4月了,而且我还手贱的报名了 6 月的 CFA 二级考试,还没有怎么看书,这个面试机会再错过就真的没戏了。不成功便成仁。

怎么办?拼吧!

这一个星期,我好像把所有课都翘了,把自己关在一个 study room 里,把网上搜集到的 behavior question 全部列出来,一个一个的过。

我大概准备了 10 几个自己的经历,有团队协作的,有沟通交流的,有领导经历的,有创新思维的,最大优点,最大缺点,最大成就,最大失败,职场规划,兴趣爱好。答案整理好了写下来,开始对着墙一遍一遍的说。

你可能被人教育过,面试不该“背”答案。可是我做不到,因为我那时候的积累还不能保证我脱口而出用词就够准确,故事讲的就够言简意赅。最开始我以为是我语言不过关,可是现在我觉得语言有关系,但不是最重要的,最重要的实际是逻辑。

换句话说,冷不丁的问你一个面试问题,即使让你用中文讲,你也可能啰啰嗦嗦把人讲晕。所以预先准备的意义在于把故事的逻辑性梳理好,可以用一个叫 STAR(Situation,Task, Action, Result)的框架,提前精简,记住最重要的几个关键词,把每个答案控制在 2 分钟之内

答案组织好就要反复说,说到熟练。因为是自己写的答案,所以说起来应该是很自然的,不死板的。如果是借鉴的句子但很拗口,一定要改成让自己顺口的话。

你可能会困惑,如果每个问题都需要写下来才能回答好,那如果问到没准备的问题不就抓瞎了?而且不会一辈子回答任何问题都得先写下来吧?

最开始你准备每个经历可能都会花上一两个小时的时间,这是苦功,不能缺的。但是当你准备了 10 个以上的经历之后,你会发现你更游刃有余了,有些问题虽然没有准备,但是可以套用准备过的经历。再到后来,你可以只需要想一个框架,就可以比较清楚的去回答问题了。这些都是我在那几年准备面试的时候慢慢体会到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值