2024-02-25 14:46:47 +00:00
|
|
|
#pragma once
|
2023-06-20 04:33:09 +00:00
|
|
|
|
|
|
|
#include "StarMaybe.hpp"
|
|
|
|
#include "StarString.hpp"
|
|
|
|
|
|
|
|
namespace Star {
|
|
|
|
|
|
|
|
class LockFile {
|
|
|
|
public:
|
|
|
|
// Convenience function, tries to acquire a lock, and if succesfull returns an
|
|
|
|
// already locked
|
|
|
|
// LockFile.
|
|
|
|
static Maybe<LockFile> acquireLock(String const& filename, int64_t lockTimeout = 1000);
|
|
|
|
|
|
|
|
LockFile(String const& filename);
|
|
|
|
LockFile(LockFile&& lockFile);
|
|
|
|
// Automatically unlocks.
|
|
|
|
~LockFile();
|
|
|
|
|
|
|
|
LockFile(LockFile const&) = delete;
|
|
|
|
LockFile& operator=(LockFile const&) = delete;
|
|
|
|
|
|
|
|
LockFile& operator=(LockFile&& lockFile);
|
|
|
|
|
|
|
|
// Wait at most timeout time to acquire the file lock, and return true if the
|
|
|
|
// lock was acquired. If timeout is negative, wait forever.
|
|
|
|
bool lock(int64_t timeout = 0);
|
|
|
|
void unlock();
|
|
|
|
|
|
|
|
bool isLocked() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
static int64_t const MaximumSleepMillis = 25;
|
|
|
|
|
|
|
|
String m_filename;
|
|
|
|
shared_ptr<void> m_handle;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|