编程语言
首页 > 编程语言> > Java FileLock是一个POSIX顾问(fcntl)锁

Java FileLock是一个POSIX顾问(fcntl)锁

作者:互联网

我有一个使用POSIX顾问锁来锁定文件的C程序.也就是说,它使用POSIX fcntl system call进行锁定操作.我想要一个Java程序与该C程序进行互操作,所以我希望我的Java程序也使用POSIX顾问锁. Java should中的文件锁定使用标准FileLock类.但是关于如何实现锁定,API文档可以理解为模糊:

This file-locking API is intended to map directly to the native locking facility of the underlying operating system. Thus the locks held on a file should be visible to all programs that have access to the file, regardless of the language in which those programs are written.

如果我在POSIX操作系统上运行Java(Oracles,Open JDK)的通用实现,或者更具体地说是GNU / Linux系统,可以安全地假设Java FileLock类使用POSIX咨询锁吗?

解决方法:

一些Unix操作系统,包括Linux,提供了BSD-style (flock) locks,因此可能认为Java FileLock可以使用BSD样式的锁而不是POSIX locks来实现.但这是不可能的,因为BSD样式的锁是全文件锁而不是记录锁,FileLock是一个记录锁:每个锁都用于文件中的一系列字节.因此在Unix系统上没有真正的选择,并且假设FileLock的实现使用POSIX fcntl锁是Unix操作系统上的安全假设.

生成的FileLock锁可能会也可能不会与BSD样式的锁交互.可以使用POSIX锁(this was the case for Linux before version 2.0)实现BSD样式的锁,或者操作系统可以具有两种类型的锁定交互(this is the case for FreeBSD).但总的来说,无法保证,BSD风格的锁和Java锁可能彼此有效地不可见(this is the case for any version of Linux you are likely to encounter).

标签:file-locking,java,linux,posix,fcntl
来源: https://codeday.me/bug/20190722/1506879.html