PoorShell で排他ロック
2024-11-22 作成 福島
TOP > cgi > ps1-exlock
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell ]

PoorShell で排他ロックだなんて、もはや何かのビョーキかもしれない。
ロックファイルにはディレクトリを使用しているので Unix、Windows を問わず使えます。
(Linux 用の PowerShell もある。だけど使ったことないや → やってみたら使えた)

また、以前掲載した Python 用PHP 用十進 BASIC 用Bash 用の排他ロックと連携することもできます。
商用/非商用を問わず、自由にコピーして使ってください。

最近、サーバにも SSD を使うことが増えてきました。
SSD のシステムではストレージに負荷をかけないよう、ロックファイルの保存先として
Linux では tmpfs を、Windows では RAM ディスクを使用してください。


exLock.ps1 文字コードは Shift-JIS です。

• Start-Sleep に -Seconds ではなく -Milliseconds を指定しているのはわざとです。
 PowerShell 5.1 (Windows10/11 のデフォルト) では Start-Sleep -Seconds NN に小数を指定できません。(エラーにもならない)
 Windows の PowerShell を最新の 7 にアップグレード(?)すれば指定できるけど、一般の Windows でそんなの見たことない。

使い方は、.\lock_tmp\ というディレクトリを作成したとして、こんな感じ

. .\exLock.ps1

$lockPath = ".\lock_tmp\lock.LK"
$lock = New-Object exLock($lockPath)
$isLock = $lock.lock()
if ($isLock -eq $true) {
    # ロック中に実行する処理
}
$lock.unlock()  # 必ず記述する

class を使っていますが、PoorShell にはデストラクタが無いため unlock() を明示する必要があります。