我有一个API来登录到一个系统。它不支持使用同一个用户id的并发登录(我猜是因为许可证)。但是,这个代码可以由来自另一个系统的不同用户启动的不同进程/客户端调用,在我的例子中,是一个ClearCase触发器。
my $conn = new BuildForge::Services::Connection('ccbuildforged01', 3966);
my $token = $conn->authUser('bldforge', 'password');我有两个选择。
我谷歌了一下,发现:一个简单的文件和一个锁似乎就是你所需要的。你按锁,附加,解锁。你打开锁,寻找,阅读,截断,解锁。
有人能给我一个代码样本吗?
发布于 2012-12-21 23:08:09
我会用用户信息维护10个文件(比如1.conf,但10.conf)。
要获得可用的用户id,请查找没有对应.pid文件的.pid文件(例如,1.pid)。如果您找到了一个独占锁,请尝试获取该文件的独占锁,然后创建相应的.pid文件并对其进行独占锁定。(如果其中任何一个失败,请查找另一个文件。)
完成后,释放.conf文件上的锁,然后释放锁并删除.pid文件。
如果您想避免可能的争用条件,可以在查找可用的用户id之前尝试锁定一个queue.lock文件。如果它已经被锁定,等待锁被释放。
发布于 2012-12-31 16:39:28
https://stackoverflow.com/questions/13992827
复制相似问题