多线程许可证的理解和精妙比喻

来源:互联网 发布:m1216nfh网络打印驱动 编辑:程序博客网 时间:2024/05/01 23:22
相信大家或多或少都接触过,用多线程操作一个全局变量。通常我们需要加许可证,但是新手往往不知道在哪里加,许可证的意义又是什么。
这里我抛开传统的说教式一大堆头晕脑胀的道理,我只给你讲个故事。

话说从前有个五品大学士,学问非常好,跟皇上关系也还过得去,可惜一直没有子女。后来夫人不辞辛苦烧香拜佛,终于老来得女,夫妻俩当作掌上明珠一样养到了十六岁,到十六岁这一年,大学士因为卷入党争被皇上一刀砍了,好在皇上多少顾念点旧情,没有再祸及他的家人。可是毕竟树倒猢狲散,老夫妻俩又没有儿子,老学士生前又有些清高,对家中仆人也是不假辞色。结果家中仆人欺她孤女寡母,短短几天时间纷纷卷了珠宝走得一个不剩。
母女俩好歹收殓了大学士,发现这个情况,不由悲从心来,结果老夫人日夜悲伤哭瞎了双眼,又急火攻心瘫在了床上。家中无米无柴,为了赡养老妇人,这女孩一咬牙终于低头走进了生香楼。

这一入青楼深似海,感觉自己萌萌哒,于是就向妈妈桑提出了一个要求,说我确实需要钱,但是我还是希望有一点规矩。把规矩一说,却跟那老鸨的想法一拍即合,原来那老鸨自然深知请客不如钓客,偷不如偷不着的道理,于是把她好好打扮了一番,起名红豆,让她独自站在全楼最高处,同时列出了规矩:
生香楼虽然是个广接宾客的地方(允许多线程),但是红豆姑娘作为全楼唯一的头牌(全局变量),来往客人必须遵守以下规矩:
1 在她面前设置了一道珠帘(全局变量 珠帘 = 创建进入许可证);
2 每次只允许一位客人进入(进入许可证);
3 二人交流一番后客人退出(退出许可证);
4 所有客人都得走这一道珠帘,只要里面有客人,所有客人必须都在门口等着,直到出来为止(多线程遇到许可证的时候堆积线程)。
于是,整个生香楼的运作情况是这样:
话说有这么一个书生,同时点了春香和秋竹,一起听着小曲吃着茶点,忽然想到了一首绝妙好词想要跟红豆分享,于是他赶走了春香秋竹,撤了茶点洗净了手,喊了一声“进入许可证(珠帘)”,也没人应和他,他自己还是规规矩矩等在了顶楼珠帘外。看到珠帘一直是合着的状态,倒也不急,身后也陆续有了其它人等着(线程堆积)。直到前面一个人也出来,珠帘变成了挑开的状态,于是他对旁边挑帘的丫鬟微微一笑,随手甩出一颗银粒,然后正了正衣冠,骄傲的回头看了一眼排队的人群,昂首走进了香闺。

事毕走出珠帘,喊了一声“退出许可证(珠帘)”,此时其它等待的客人一拥而上,终于又被另一位喊的“进入许可证”得到了允许,才进去。书生微微一笑,心满意足的下楼离开了这烟花之地。

总结:
许可证并不是针对线程的,也不是针对某个变量的,而是本身就是个独立的全局变量,他就是自己孤零零的摆在那,只起到一个开关的作用。

原创粉丝点击