【发布时间】:2014-05-09 10:30:54
【问题描述】:
我有一个使用 POSIX 咨询锁来锁定文件的 C++ 程序。也就是说,它使用POSIX fcntl system call 进行锁定操作。我想要一个 Java 程序与那个 C++ 程序互操作,所以我希望我的 Java 程序也使用 POSIX 咨询锁。 Java should 中的文件锁定使用标准的FileLock 类。但是 API 文档对锁定的实现方式含糊其辞,这是可以理解的:
此文件锁定 API 旨在直接映射到底层操作系统的本机锁定设施。因此,文件上的锁应该对所有有权访问该文件的程序可见,而不管这些程序是用什么语言编写的。
如果我在 POSIX 操作系统或更具体地 GNU/Linux 系统上运行 Java(Oracles、Open JDK)的通用实现,那么假设 Java FileLock 类使用 POSIX 咨询锁是否安全?
【问题讨论】:
-
它有什么选择?
-
@EJP 另一种方法是使用 BSD
flock系统调用。使用fcntl可能会或可能不会实现。 -
@EJP ...但仔细观察,我发现
flock不支持记录级锁定。 -
还有"The flock(), fcntl(2), and lockf(3) locks are compatible"。所以这个问题没什么好说的了。
-
除非最近发生了变化,否则
flock与 Linux 上的fcntl(和lockf)不兼容。这两者本质上是彼此看不见的。所以这个问题确实是有道理的。
标签: java linux posix file-locking fcntl