首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java FileLock是POSIX建议(fcntl)锁吗?

Java FileLock是POSIX建议(fcntl)锁吗?
EN

Stack Overflow用户
提问于 2014-05-09 10:30:54
回答 2查看 3.3K关注 0票数 5

我有一个C++程序,它使用POSIX建议锁锁定文件。也就是说,它使用系统呼叫进行锁操作。我想要一个Java程序与那个C++程序进行互操作,所以我希望我的Java程序也使用POSIX咨询锁。Java 应该中的文件锁定使用标准的FileLock类。但是,可以理解的是,API文档对于如何实现锁定是模糊的:

此文件锁定API的目的是直接映射到底层操作系统的本机锁定工具。因此,对于所有访问该文件的程序来说,文件上的锁都应该是可见的,而不管这些程序是用什么语言编写的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-12 12:46:32

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

生成的FileLock锁可能与BSD样式的锁交互,也可能不与BSD风格的锁交互。BSD风格的锁可以使用POSIX锁(2.0版之前的Linux就是这种情况。)实现,或者操作系统可能具有两种类型的锁定交互(这就是FreeBSD的情况)。但是一般来说,这是不能保证的,而BSD样式的锁和Java锁可能实际上是彼此不可见的(对于您可能遇到的任何版本的Linux,都是这样的。)。

票数 5
EN

Stack Overflow用户

发布于 2014-05-09 12:26:19

试试这个:

(1)编写一个小型java程序,它锁定文件并休眠(或停止执行)。

(2) cat /proc/锁

(3)您将看到如下线条:

代码语言:javascript
复制
24: POSIX  ADVISORY  READ  1784 08:01:27384070 1073742826 1073742335
25: FLOCK  ADVISORY  WRITE 815  00:0f:9772     0          EOF

从第5列中标识您的进程ID。如果第2列是FLOCK,则使用flock。如果是POSIX,那么第2列将是POSIX,指示正在使用fcntl (或构建在fcntl之上的fcntl)。

如果java必须选择一个或另一个,那么POSIX将是明智的选择,因为它支持记录锁定。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23562369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档