forked from OSchip/llvm-project
28 lines
608 B
Python
28 lines
608 B
Python
"""
|
|
Interprocess mutex based on file locks
|
|
"""
|
|
|
|
import fcntl
|
|
|
|
|
|
class Lock:
|
|
|
|
def __init__(self, filename):
|
|
self.filename = filename
|
|
# This will create it if it does not exist already
|
|
unbuffered = 0
|
|
self.handle = open(filename, 'a+', unbuffered)
|
|
|
|
def acquire(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_EX)
|
|
|
|
# will throw IOError if unavailable
|
|
def try_acquire(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_NB | fcntl.LOCK_EX)
|
|
|
|
def release(self):
|
|
fcntl.flock(self.handle, fcntl.LOCK_UN)
|
|
|
|
def __del__(self):
|
|
self.handle.close()
|