小编hom*_*ski的帖子

FileChannel tryLock()方法是检查锁还是只是打破它们?

我有两个进程可以查看相同的文件,并希望实现文件锁定.问题似乎是一个进程用java编写而另一个进程用C编写,并且不清楚java端如何实现低级锁定.该平台是Solaris 10.我尝试在文件上引入锁定,以防止在C进程读取文件时Java进程进行更新.我的想法是尝试从java代码中获取一次锁定10次,然后才无条件地写入文件(我假设锁定类型是一个咨询锁定).但是,java tryLock()会在第二次尝试时中断C进程的锁定并破坏读取.

这是代码,简化(Java):

    int iAttemptCnt = 0;
              FileChannel wchannel = new FileOutputStream(new File(fileName), false).getChannel();;
              FileLock flock;
    while(true){
        try{
            MyLog.log(MyLog.LVL_INFO, "attempt to lock  file");
            if( (flock = wChannel.tryLock()) == null ){
                // lock held by another program
                if(++iAttemptCnt >= 10 
                    break;                  
            }
            else{
                MyLog.log(MyLog.LVL_INFO, " file locked");
                break;
            }
        }catch(OverlappingFileLockException ofle){
            .......                     
            if(++iAttemptCnt >= 10 ){
            ...
                break;          
            }                   
        }catch(IOException ioe){
            throw new IOException("failed to lock the  file");
        }
        try{
            MyLog.log(MyLog.LVL_INFO, "File already locked, retrying in one second");
            Thread.sleep(1000);
        }catch(InterruptedException …
Run Code Online (Sandbox Code Playgroud)

java solaris file-locking filelock

5
推荐指数
1
解决办法
917
查看次数

标签 统计

file-locking ×1

filelock ×1

java ×1

solaris ×1