Synchronizes the access on critical sections between processes.
Prototypic lock file (with symlink)
#include <string>
class LockFile
{
public:
LockFile(std::string& fpath);
~LockFile();
private:
void lock();
void unlock();
std::string m_fpath;
};
#include "lockfile.hpp"
#include <unistd.h>
LockFile::LockFile(std::string& fpath) : m_fpath(fpath)
{
lock();
}
LockFile::~LockFile()
{
unlock();
}
void LockFile::lock()
{
std::string pid = std::to_string(getpid());
while (symlink(pid.c_str(), m_fpath.c_str()))
{
usleep(500000);
}
}
void LockFile::unlock()
{
unlink(m_fpath.c_str());
}
#include "lockfile.hpp"
#include <string>
int main()
{
std::string fpath("/tmp/lock_file");
LockFile lockfile(fpath);
// do synchronized stuff
return 0;
}
Alternative
Boost has an interprocess namespace which provides for example a mutex in shared memory.