美文网首页
避免遗忘UNLOCK的小技巧

避免遗忘UNLOCK的小技巧

作者: glinuxer | 来源:发表于2018-05-03 21:52 被阅读0次

这是个人微信公众号LinuxerPub发布的文章


C++程序可以通过封装来实现RAII,从而避免一切资源泄漏,包括忘记unlock。当时就为了这点,我就特别想推动用C++写C代码,C++只做封装,其它逻辑还是使用C编写。这样对于大部分程序员来说,基本上就没有学习C++的成本,同时还可以享受到高级语言的便利。真希望早日可以尝试这个实践 —— 去年底已经要求本厂的C语言程序员,学习一点C++概念,并开始进行本厂C++底层库的封装实现。

        如果条件限定只能使用C语言,就要按照一些原则和技巧编写代码,避免遗忘unlock。先介绍几个原则:

 函数尽量一个出口,即一个return。这样可以保证退出的代码和逻辑是唯一的,既不易出错,也便于维护。为了实现这一目的,有时候goto是必不可少的。goto用于error handler,是极其适合的。

 写完lock,立刻写unlock,然后再在中间写其它逻辑代码;如果需要持锁返回,则函数名称要有明显的提示;

如果涉及多个锁,始终按照一个顺序上锁,解锁。如果可能的话,封装一个函数用于给多个锁上锁,解锁;

除了以上的原则,今天介绍一个C编码的小技巧,可以在函数内部防止遗漏unlock。以mutex互斥锁为例,进行下面代码的封装。

经过这样的封装,就要求LOCK和UNLOCK必须是成对使用,一旦遗漏或者用错一个,就会在编译阶段报错。

请看下面的示例程序:

如果没有忘了写PTHREAD_MUTEX_UNLOCK或者错写成LOCK了,在编译阶段就会报错,错误信息显示少了一个'}'符号。

今天的小技巧介绍完毕。如果我个人没记错的话,我已经有好几年没有写出带有死锁,内存泄漏的代码了,无论是C还是C++。

相关文章

  • 避免遗忘UNLOCK的小技巧

    这是个人微信公众号LinuxerPub发布的文章 C++程序可以通过封装来实现RAII,从而避免一切资源泄漏,包括...

  • 多线程学习(五)

    unique_lock 前面有一篇讲了使用lock_guard替代lock()和unlock(),可以避免忘记un...

  • 避免头发静电的小技巧

    进入秋季,头发也会变得容易起静电,乱蓬蓬的头发一点都没有造型,怎么办?下面美颜网小编为你支招,教你几个避免头发起静...

  • 避免尬聊的小技巧

    很多人不擅长聊天,总是陷入尬聊的局面,我来给你分享一个聊天的底层逻辑。让你从此告别,无话可说。说yes and。 ...

  • 如何避免遗忘

    最近不止经常丢东西,还经常忘记事情,别人告诉我们的事情,可能转头就能忘记,甚至努力去回忆都无法记起,虽然这不是一种...

  • unlock

    Continuous effort, not strength or intelligence,is the ke...

  • 4个平面设计小技巧:让视觉主题更突出——黎乙丙

    本文分享几个平面设计小技巧,本文分享的平面设计小技巧可以让我们避免因为作品中视觉元素过多,导致整体视觉主体不够突显...

  • Android 避免两次弹出对话框,Fragment等。

    小技巧: 用户快速点击时,避免重复弹出对话框,Fragment等。使用 WeakReference 将小对话框保...

  • AQS-ReentrantLock(解锁)源码浅析

    1、unlock入口 public void unlock() {sync.release(1);} 2、Abst...

  • iOS 代码可能遗忘的小技巧

    1.计算程序运行时间 2.根据模拟器或真机执行不同代码 3.颜色的宏定义 4.iOS应用程序直接退出 5.设置状态...

网友评论

      本文标题:避免遗忘UNLOCK的小技巧

      本文链接:https://www.haomeiwen.com/subject/sozlrftx.html