I'd like to use boost::interprocess::file_lock
to ensure that files that are written to a directory x
by process P1
are not read by process P2
until they are complete. To do this, I'd like to have P1
lock the files with boost::interprocess::file_lock
while it's writing them, and then unlock them when it's done. Then P2
can just skip over (and come back to) any files that are locked.
The problem I'm having is that it appears that boost::interprocess::file_lock
only lets you lock files that exist. But if I first create the file, and then lock it, then there's a race condition where:
P1
creates the fileP2
notices the file and starts reading itP1
locks the fileP1
writes some dataP2
reads some data, gets to the end, and ends up with only part ofP1
's output.
So what I'd like to do is create a file and have it be locked as soon as it's created. Is there a way to do this using boost::interprocess::file_lock
?