燈明ブログ

現状は小池啓仁の応援ブログ

Perlでのプロセス排他について

Web等のマルチユーザ環境では、複数のユーザが同時に処理要求した場合、シーケンシャル番号の採番などで排他制御が必要になります。
元々マルチユーザ環境のLinux系では、色々とサポートされていますが、元々シングルユーザ環境のWindows系では、あまりサポートされていません。


以下にLinux系とWindows系の両方で動作するプロセス排他のサンプルを組んでみました。
何かの参考になれば幸いです。

use strict;
use warnings;

Lock_Process();
print "AAAAAAAAAAA\n";
sleep(10);
print "BBBBBBBBBBB\n";
Unlock_Process();


sub Lock_Process {
my $lock_flg;
    while (1) {
        $lock_flg = mkdir('lockdir', 0777);
        if ($lock_flg == 1) {
            last;
        }
        sleep(1);
    }
}

sub Unlock_Process {
    rmdir('lockdir');
}