Boost logo

Boost Users :

Subject: Re: [Boost-users] [Interprocess] Problem with file_lock on Linux
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2015-08-28 06:10:58


El 27/08/2015 a las 13:25, Jan Niklas Hasse escribió:
> The following code
>
> #include <boost/interprocess/sync/file_lock.hpp>
> #include <iostream>
> #include <fstream>
>
> int main() {
> std::ofstream file("test.lock");
> boost::interprocess::file_lock flock("test.lock");
> std::cout << flock.try_lock();
> std::cout << flock.try_lock() << std::endl;
> }
>
> outputs 10 on Windows and 11 on Linux. Shouldn't it also print 10 on
> Linux or am I missunderstanding file_lock? I've also tried locking from
> different threads, but no luck.

File locks are "process-wide resources", this means that there is no
guarantee about thread synchronization within the same process. It only
works to synchronize two different processes. Although the documentation
speaks about processes, it should reflect this limitation appropriately.
In windows, file locks do support intra-process synchronization whereas
in UNIX only process-wide synchronization is supported.

In any case you are in undefined behavior territory, trying to lock
twice from the same thread, even from the same process for file locks.

Best,

Ion


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net