shell實現單例模式

2021-09-02 20:29:10 字數 800 閱讀 5267

使用場景:幾個shell指令碼共享乙個本地derby庫,需要保證同一時間只有單一shell指令碼占有資料庫。

方法一:檢視程序是否存在

#!/bin/bash  

scriptname=`basename $0`

#basename,返回乙個字串引數的基本檔名稱

#pidof -x,找出shell指令碼script的程序pid,全部列出程序pid

if [ `pidof -x $scriptname | wc -w` -gt 2 ]; then

echo "instance is running!"

exit 0

else

sleep 10 #執行程式

fi

驗證當前執行緒中是否存在basename相同的程序

優點:shell退出後,可以快速檢測到;沒有檔案的生成。

缺點:只適應單一shell指令碼,如果多個指令碼之間互斥,則不啟作用。

方法二:flock鎖檔案

flock 是對於整個檔案的建議性鎖。也就是說,如果乙個程序在乙個檔案(inode)上放了鎖,那麼其它程序是可以知道的。(建議性鎖不強求程序遵守。)最棒的一點是,它的第乙個引數是檔案描述符,在此檔案描述符關閉時,鎖會自動釋放。而當程序終止時,所有的檔案描述符均會被關閉。於是,很多時候就不用考慮解鎖的事情啦。

lockit () 

#獲得鎖成功

}

優點:解決了多個shell指令碼共享資源

缺點:當獲得鎖的執行緒退出(包含kill)需要等待一段時間後,才能flock成功。

單例模式實現

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。1 適用於單執行緒 class singleton public static singleton getinstance return instance 註解 singleton的靜態屬性instance中,只有...

單例模式實現

推薦的單例實現方法 餓漢模式 1種 public class singleton public static singleton getinstance 雙重檢查 volatile關鍵字必須加 public class singleton public static singleton getins...

單例模式實現

什麼是設計模式 設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類的 設計經驗的總結 使用設計模式的目的 為了 可重用性 讓 更容易被他人理解 保證 可靠性 什麼是單例模式 單例模式是設計模式的一種,也是最簡單的一種,在單例模式中乙個類只能建立乙個例項,這種設計模式可以...