bash 中有效建立鎖

2022-02-11 19:08:25 字數 585 閱讀 3797

有時候需要防止一段**在被同時執行,就需要使用鎖來防止**重入。常常見到這樣的**:

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
這兩種方法可以保證加鎖和檢測鎖是乙個原子操作,避免競爭問題。

bash 中有效建立鎖

有時候需要防止一段 在被同時執行,就需要使用鎖來防止 重入。常常見到這樣的 if f var lock mylock then touch var lock mylock rm f var lock mylock fi但實際上,這樣是有問題的。如果兩個程序在 test 和 touch 之間,另乙個程...

C C 獲取檔案中有效行的數量

幾種獲取檔案有多少行的方法 使用c 中的ifstream 與 getline函式搭配使用 如 std string file name f phone num 10000000.txt std ifstream ifs file name.c str int line count 0 記錄檔案中行的...

求單鏈表中有效節點個數

package com.atguigu.linkedlist classname singlelinkedlistdemo description 單鏈表測試 date 2021 2 28 author cakin public class singlelinkedlistdemo 功能描述 獲取單...