从高中一次半夜不冲厕所的经历谈程序

我高中的时候,是住校生。寝室到了10点半就会熄灯,早上6点40左右就要起来跑早操。

 

一天半夜大概两三点,起床放了个大号。想要充厕所的时候发现没有水,很尴尬,也没有其他的办法。半夜还冷的很。就上床睡觉了,想着明早一早起来的时候冲就是了。

 

等到第二天早上,一早起来,急急忙忙的出早操,生怕迟到,迟到是会被班主任老左骂的,我也就忘了冲厕所。等中午回到寝室的时候,宿管大叔找到我说我没有冲大便的事,说我生活习惯有问题之类的。我和他解释了半天,大叔最后说,算了,我本来还打算还跟你们老左说的,看你认错态度比较好,就算了。我心中os,瓜娃子娃娃,这个事情都还要给老左说,你大爷,我又不是故意的。后面,宿管大叔警告我说,以后注意点,下不为例。

 

宿管大叔的这种行为,用我们四川话说,就是男牙尖。

 

高中差不多都是10年前的事了,后面随着社会的飞速发展,我在很多地方都发现了红外线感应的厕所。只要你把你的屁股挪出了红外线的感应范围,那他就会自动帮你冲掉便便了。多好的事儿啊。

 

我一直都坚持一个观点,程序来源于生活,而且程序也高于生活。程序和生活是很关联的。

 

当我们学习到多线程编程的时候,就难免会学习到锁的使用。我们也会发现到,因为我们记性不好(也许不是),我们都可能会忘了“冲厕所”,我们可能会忘掉把锁释放掉。

 

想想这么一个函数:

 

int fun(int x) {

 lock(...);

 if (...) return 1;

 else if (...) return 2;

 else throw ...;

 unlock(...);

}

 

这个时候,我们忘掉“冲厕所”的机会就太大了,多个return语句,以及可能出现的异常抛出。都有可能导致我们忘记了释放掉锁。以为我们要在每个return,throw前面加上一个unlock。

 

那么我们能不能给这个函数加一个红外线装置?让我们屁股一挪开的时候,他就充掉我们的便便?

 

在我们学习程序的时候,被误以为C语言程序之父的谭浩强先生曾经写到过的《C语言》中讲,变量三要素:类型,名称,值。其实我觉得还有一个东西很重要,作用域。为什么重要呢?当你在坑里的时候,你是在大便,大便在坑里是正常的,当你走出坑的时候,在星巴克喝咖啡的时候(我还没喝过呢),在电影院看电影的时候,如果有个大便是在你视线之类,这不就囧死你娘亲了。如果没有作用域,我们的程序世界不知道会带来怎样的一种不可想象的混乱。

 

因为作用域很重要,我们可以使用作用域的概念完成“红外线装置”。

定义如下一个类ScopeLock

class ScopeLock {

public:

 ScopeLock(pthread_mutex_t mutex) : mutex(_mutex)

 {

  pthread_mutex_lock(&mutex);

 }

 ~ScopeLock() {

 pthread_mutex_unlock(&mutex);

 }

private:

 pthread_mutex_t mutex;

};

 

好了,这样你就只需要在你需要锁上锁的地方顶一个一个ScopeLock的局部变量,然后就不用管了,就好比,你只需要打开厕所的们,安心大便,就不用想着冲厕所的事儿了。多好的事儿啊。

 

需要说明这个ScopeLock不是我自己发明的,来自POSA卷2,《pattern oriented software architecture》,不错的一本书。

 

如果,我只能把忘了冲大便这个事情学习这么一点儿,我觉得我就肤浅了。说过,程序高于生活,你还能想到其他的吗?想到同样方法解决类似问题的用途吗?

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle:ORA-28000异常(帐户已被锁定),修改账号登录失败次数

问题描述 最近系统更换了数据库服务器,IP地址也变了,于是就把应用服务器中配置数据库连接的位置做了修改,但是修改后应用起不来了。 经过半天也没发现问题,后来想试试连数据库看看,结果PL/SQL提示“ORA-28000错误”&…

【转】VTK修炼之道1_初识VTK

1.VTK是什么? Visualization ToolKit 3D计算机图形学、图象处理及可视化工具包 VTK使用C、面向对象技术开发;基于OpenGL,封装了OpenGL中的功能,屏蔽细节、便于交互、易于使用提供多种语言接口C++ 、Java 、…

一道解决的非常漂亮的算法题

这是多年以前做的一道题目,原题来自软件报或者电脑报 ,我记不清了。解决这个题目有一个关键的步骤,就是要求一个整数在一个整数三角阵中的坐标。这篇blog就是讨论这个求坐标的问题,不是讨论那个报纸上的题目。现在将题目描述如下&…

HTTPS原理和对中间件攻击的预防

一、https/tls原理 HTTPS访问的三个阶段 第一阶段 认证站点 客户端向站点发起HTTPS请求,站点返回数字证书。客户端通过数字证书验证所访问的站点是真实的目标站点。 第二阶段 协商密钥 客户端与站点服务器协商此次会话的对称加密密钥,用于下一阶段的加…

【转】医学影像技术(中国普通高等学校本科专业)

医学影像技术专业培养适应我国社会主义现代化建设和医疗卫生事业发展需要的,德、智、体全面发展,具有基础医学、临床医学和现代医学影像必备的基本理论知识和基本技能,从事临床影像检查、诊断与治疗技术工作的高级技术应用性专门人才。 中文…

Windows CE下流驱动的动态加载

Windows CE下流驱动的动态加载 闲话少说,进入正题。查找EVC的帮助,发现函数ActivateDevice()可用来加载驱动程序。而这个函数的使用是相当简单的。我就不多说了,贴上一段帮助最能说明问题。当然,你也可以用…

HTTPS原理全面介绍【备查】

来源:https://www.cnblogs.com/haimishasha/p/11373034.html 目录 应用层协议:HTTPS 1. HTTPS定义 2. 密码学基础  3. HTTP通信问题 4. SSL/TLS协议 5. HTTP 向 HTTPS 演化的过程 5.1 对称加密 5.2 非对称加密 5.3 对称加密非对称加密 5.4 安…

【转】VTK修炼之道2_VTK体系结构1

1.OverView综述 The Visualization Toolkit consists of two basic subsystems: a compiled C class library (一个已经编译好的C类库)and an “interpreted” wrapper layer(一个用于解释的语言层) that lets you manipulate the…

WINCE6.0 DM.EXE 激活驱动失败的原因之一

前些天把WINCE6.0的开发环境建好了,今天定制了一个系统,练习了一下驱动的编写和调试。把DLL文件通过VS2005部署到开发板上,用一位大侠写的DM.EXE工具进行激活,但是发现点击激活按钮式无反应,驱动还是停在“停用”状态&…

Linux:tomcat安装/版本升级

本文适用于安装或更新tomcat版本。 1.进入tomcat目录,查看当前tomcat版本 cd /usr/local/tomcat/bin ./version.sh 2.备份原tomcat 可以拷贝原tomcat,或者直接修改原tomcat的文件夹名称作为备份。 cd /usr/local/ #方法1:创建目录&…

【转】VTK与Qt整合的示例

VTK与Qt整合的示例 VTK附带的程序示例中大多是基于控制台的,作为可视化开发工具包,VTK也可以与很多流行的GUI开发工具整合,比如MFC、Qt(题外话:Qt已经被Digia从诺基亚手中收购了,Qt现在的链接是:http://qt…

WinCE驱动调试助手V2.5

http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/showart.php?id1279989 工欲善其事,必先利其器。做WinCE驱动的开发已有一段时间了,WinCE驱动调试助手也跟着更新了很多功能。现在只要做驱动&#…

Web应用系统中数据传递的方式汇总

本文转载自sina_blog(siangzhang) 目录 1 Socket方式 2 ftp/文件共享服务器方式 3 数据库共享数据方式 4 message方式 5 案例 随着近年来SOA(面向服务技术架构)的兴起,越来越多的应用系统开始进行分布式的设计和部署。 系统由原来单一…

【转】CT (电子计算机断层扫描)

CT(Computed Tomography),即电子计算机断层扫描,它是利用精确准直的X线束、γ射线、超声波等,与灵敏度极高的探测器一同围绕人体的某一部位作一个接一个的断面扫描,具有扫描速度快,图像清晰等特点,可用于多…

WinCE驱动的动态加载

// //TITLE: // WinCE驱动的动态加载 //AUTHOR: // norains //DATE: // Monday 22- February-2010 //Environment: // WINDOWS CE 5.0 // WinCE驱动的调试,很多人的第一感觉就是:编写好DLL文件,接着在PB中添加相关注册表信息&am…

Linux:chmod命令-修改文件或目录的权限

给新安装的tomcat/bin目录下的所有文件增加执行权限(所有用户、组) chmod -R ax /usr/local/tomcat/bin ------------------------------------------------------------------------------------------------------------------- 关于具体的chmod命令…

获取WinCE已加载驱动的信息

// //TITLE: // WinCE驱动的动态加载 //AUTHOR: // norains //DATE: // Monday 22- February-2010 //Environment: // WINDOWS CE 5.0 // WinCE驱动的调试,很多人的第一感觉就是:编写好DLL文件,接着在PB中添加相关注册表信息&am…

【转】详解冠状面_水平面_矢状面_窗宽_窗位

在接触人工智能医疗方面时,单是学习算法和代码原理还不够,需要一定的医学影像知识储备。 B超、CT、MR等都算是医疗影像,在现实生活中,从医院检查身体后拿到的胶片是处理过后的二维图像。这些医疗影像其实是三维的。 最常见的图片格…

js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选

163邮件一个比较爽的功能就是可以通过多选邮件,拖动到左侧的文件夹列表,实现邮件归类的功能关于我对拖动分配的实现将在后文写出这里说说在CheckBox的选择中做得尝试和实现的效果、方法1。点击表格Title实现全选每行这个早有人做了,我这里借鉴一下 一块贴…

【转】医学图像中的窗宽、窗位!!

在CT等医学影像显示领域,我们经常会听到窗宽(Window Width,简写WW)、窗位(Window Level,简写WL)的概念,那么到底什么是窗宽、窗位,它们跟医学图像之间的关系又是什么? 先说一下CT值…