
Ostep 31 Semaphores
Ostep 30 Condition Variables
复用:业务系统设计中的陷阱
Ostep 29 Lock Based ConcurConcurrency Data Structure
Ostep 28 Locks
Ostep 26 Concurrency Introduction
这章主要介绍了信号量的使用,如何使用信号量来实现并发编程。 信号量的定义 sem_init(&s, 0, 1); 初始化语句,第二个参数0表示是线程间的(信号量也存在进程间的),1表示信号量的值value int sem_wait(sem_t *s) { // Decrement the value of semaphore s by on…
除了锁之外,并发程序中另一个最重要的模式就是条件变量,与锁不同,条件变量用于解决线程间的同步问题。 条件变量的基本api 主要由2个方法就可以实现, pthread_cond_wait(pthread_cond_tc, pthread_mutex_tm); pthread_cond_signal(pthread_cond_t*c); 一个wait,…
复用往往会带来耦合 复用需要单一原则,而业务系统需要的单一与之不同
这章比较简单简短,主要介绍了并发数据结构的实现。 总结下的话,实现并发的数据结构,我们需要考虑主要2个点: 正确性。这个毋庸置疑,并发情况操作下,要保证数据的正确性。 性能。并发数据结构的性能其实分两部分 在实现正确性的情况下,结构本身的性能 在线程越来越多(并发越来越高)的情况下,性能下降的程度 从这些点来考虑的话,我们直接总结下这章说道的并发数…
27章罗列了线程的api,所以就略过了 28章主要介绍了Lock 锁,上一章说到了,处理并发下的数据竞争最好的方式,就是使用锁来使得那段临界代码互斥,所以这一章主要介绍了锁。 锁的模型 锁的话,简单的模型其实也就2个功能:加锁、解锁 锁的评估 一般我们评估锁,从3个维度: 基本功能,是否提供了互斥 公平性,是否能提供对于争抢锁之间线程的公平性,也就…
这章主要介绍了线程和并发的概念 并发 并发执行下,我们需要考虑2种情况。 数据竞争 为什么并发下会有数据竞争问题? 比如最朴素的场景,2个线程同时执行i++,最终的结果总是不如预期,实际上,是因为i++本身在执行时是3条汇编指令: mov 0x8049a1c, %eax add $0x1, %eax mov %eax, 0x8049a1c 比如现在…
用GPT写的一段沙雕文案,绷不住了
昊哥走进面试房间,内心如湖面般平静。他环顾四周,看到三位面试官正用锐利的目光注视着他。中间的那位,正是鲍哥,他总是微笑着,但眼神中带着些许不屑。
“请坐。”鲍哥微微点头,故作深沉地说道。
昊哥稍稍鞠躬,坐下后便略微挺直了身板,露出一副自信而从容的表情,但眼神中却带着一丝谦卑和恭敬。
“这是我们的新同事瑞哥,他只会听我的指令。”昊哥突然说道,一旁站立的瑞哥顿时露出傲然的表情。
鲍哥闻言微微挑眉,轻蔑地笑道:“哦?你带着大哥来面试?”
昊哥低声对瑞哥说:“瑞哥,展示一下你的威力吧。”
瑞哥立刻回应,气势凌然:“昊哥,准备接令!”
鲍哥假装认真地点点头,语气中带着讥讽:“自信是好事,不过你觉得在如此激烈的竞争中,你凭什么脱颖而出?”
昊哥抬起头,眼中闪过一丝锐利:“很简单,我成尊不就是了?”说罢,他轻轻一挥手,房间里的气氛骤然一变,手中的礼物瞬间化为飞灰。
鲍哥脸色一变,但仍强作镇定:“年轻人,狂妄自大可是大忌。”
昊哥立刻恢复谦卑的姿态,微微鞠躬:“鲍哥教训的是,小弟受教了。不过,有些事顷刻炼化或许更为合适。”说罢,他再次轻轻一挥手,鲍哥顿时如灰飞烟灭,消失在空气中。
瑞哥看着这一切,微微点头,满意地说道:“昊哥,干得不错。”
其他面试官惊恐万分,纷纷俯首称臣,再不敢有任何异议。昊哥脸上依然带着谦卑的笑容,但内心冷笑,知道今天这次面试,已经是稳操胜券了。他转身跟随瑞哥离去,留下一群面试官在震惊中久久不能回神。
还押韵呢~
