Compact Language Detector 2的检测方法线程安全吗?

问题描述 投票:0回答:1

我们正在使用Compact Language Detector 2的Java包装程序实现。

the detect() function线程安全吗?

据我了解,它调用this library function

java c++ thread-safety jna
1个回答
0
投票

否,如果本机代码是用CLD2_DYNAMIC_MODE设置编译的,则不是线程安全的,您可以使用函数isDataDynamic()进行测试。

本机函数操纵静态类变量kScoringtables。如果在编译时定义了CLD2_DYNAMIC_MODE,则此变量将初始化为一组空表(NULL_TABLES),以后可以将其装入动态数据,或可能由其他线程卸载。

kScoringtables.quadgram_obj可能为非空at the line 1762 null check,然后在将其更改为第1777行中的kScoringtables对象之前更改了ScoringContext地址。在这种情况下,错误的指针将在第1785行传递给ApplyHints,可能导致在第1606行发生坏事。

[这将是非常罕见的竞争条件,但仍然可能,并且出于标准“懒惰获取程序”不是线程安全的相同原因也不是线程安全的。

为了使该线程安全,您必须测试isDataDynamic()返回false,或者确保在执行过程中其他线程无法调用loadDataFromFileloadDataFromRawAddressunloadData函数此方法(或至少直到您经过第1777行...)

© www.soinside.com 2019 - 2024. All rights reserved.