gpt4 book ai didi

java - 通过 JNA 调用 native 库时的并发问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:36:52 27 4
gpt4 key购买 nike

对于现有的 Java 应用程序(我没有源代码),我正在开发一个称为共享库的插件。不幸的是,这个共享库(用 C 编写)不是线程安全的。

应用程序在多个并发线程中调用我的插件,因此共享库被这些并发线程调用,并且由于并发性自然会产生许多错误(例如:已经打开的文件被阻止打开等)

我正在通过 JNA 访问共享库。我什至有这个共享库的源代码,但转换为线程安全库将非常耗时,目前还不可能。是否有其他建议的方法来解决这个问题?

所有 native 函数都只能从一个 Java 方法访问,因此我认为使该方法同步 可能是解决方案。你同意吗?

我试过了,可惜问题没有解决。在日志文件中,我仍然看到 Java 方法被并发调用,因此我自己解决这个问题的努力失败了。

最佳答案

是的,使用同步将是一个有效的解决方案。

如果您这样做并且仍然看到并发访问,那么(至少)有两个可能的原因:

  • 您并不总是在同一个对象上同步(例如您的方法是同步,但它是非静态的并且在不同的对象上调用)或
  • 加载了具有 native 调用的类的多个实例(实际上这是第一个类的子类型)。

关于java - 通过 JNA 调用 native 库时的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com