开发者

Locking file across services

开发者 https://www.devze.com 2023-01-06 00:11 出处:网络
What is the best way to share a file between two \"writer\" services in the same application? Edit: Sorry I should have given more details I guess.

What is the best way to share a file between two "writer" services in the same application?

Edit: Sorry I should have given more details I guess.

I have a Service that saves entries into a buffer. When the buffer gets full it writes all the entries to the file (and so on). Another Service running will co开发者_如何学Pythonme at some point and read the file (essentially copy/compress it) and then empty it.


Here is a general idea of what you can do:

public class FileManager
{
    private final FileWriter writer = new FileWriter("SomeFile.txt");
    private final object sync = new object();

    public void writeBuffer(string buffer)
    {
        synchronized(sync)
        {
            writer.write(buffer.getBytes());
        }
    }        

    public void copyAndCompress()
    {
        synchronized(sync)
        {
            // copy and/or compress
        }
    }

}

You will have to do some extra work to get it all to work safe, but this is just a basic example to give you an idea of how it looks.


A common method for locking is to create a second file in the same location as the main file. The second file may contain locking data or be blank. The benefit to having locking data (such as a process ID) is that you can easily detect a stale lockfile, which is an inevitability you must plan for. Although PID might not be the best locking data in your case.

example: Service1:

  • creates myfile.lock
  • creates/opens myfile

Service2:

  • Notices that myfile.lock is present and pauses/blocks/waits
  • When myfile.lock goes away, it creates it and then opens myfile.

It would also be advantageous for you to double-check that the file contains your locking information (identification specific to your service) right after creating it - just in case two or more services are waiting and create a lock at the exact same time. The last one succeeds and so all other services should notice that their locking data is no longer in the file. Also - pause a few milliseconds before checking its contents.

0

精彩评论

暂无评论...
验证码 换一张
取 消