zoukankan      html  css  js  c++  java
  • bash 中有效建立锁

    有时候需要防止一段代码在被同时执行,就需要使用锁来防止代码重入。常常见到这样的代码:

    if [ -f /var/lock/mylock ]; then   touch /var/lock/mylock   ...   rm -f /var/lock/mylock fi 

    但实际上,这样是有问题的。如果两个进程在 test ( [ ) 和 touch 之间,另一个进程同时执行,就会出现竞争问题,最后就可能出现同时运行的情况。要避免这种情况出现,就得改一下加锁的方式。可以用 mkdir 代替 touch,这样在锁目录以及存在的时候,会直接出错;

    if mkdir /var/lock/mylock 2>/dev/null; then   ...   rm -rf /var/lock/mylock fi 

    或者先用 set -C ,让 > 重定向在文件已经存在时出错,然后用 echo … > 来生成锁文件

    if ( set -C; echo $$> /var/lock/mylock 2>/dev/null); then   ...   rm -f /var/lock/mylock fi 

    这两种方法可以保证加锁和检测锁是一个原子操作,避免竞争问题。

  • 相关阅读:
    洛谷P1613 跑路
    洛谷P2149 Elaxia的路线
    洛谷P3119 草鉴定
    洛谷P1972 HH的项链
    洛谷P2458 保安站岗
    uva10061
    uva579
    uva 127 "Accordian" Patience
    uva10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
    uva156
  • 原文地址:https://www.cnblogs.com/shihao/p/2572673.html
Copyright © 2011-2022 走看看