我有一个 C# 项目,我需要确定给定日期是否是给定国家/地区的假期。为此,我可以使用QuantLib中的日期和日历功能。QuantLib 是用 C++ 编写的,因此我编写了一个包装器来调用此代码。我想知道我使用的代码是否是线程安全的。
以下是我在 C++ 中使用的 QuantLib 调用,用于确定给定日期是否为假日:
extern "C" _declspec(dllexport) int isHoliday(int year, int month, int day,
int trueValue, int falseValue, int errorValue)
{
try
{
QuantLib::Calendar cal = QuantLib::UnitedStates();
QuantLib::Date date(day, (QuantLib::Month)month, year);
return cal.isHoliday(date) ? trueValue : falseValue;
}
catch(...)
{
return errorValue;
}
}
这是我用来调用我的 C++ 代码的 C# 签名:
[DllImport("QuantLibHelpers.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int isHoliday(int year, int month, int day,
int trueValue, int falseValue, int errorValue);
我能找到的关于 QuantLib 代码的最多信息在这里。那里没有任何东西看起来是线程不安全的,但我不能确定。更一般地说,不管我使用 QuantLib,调用像这样的 C++ 代码是线程安全的吗?是否有可能一个线程在创建日期对象时被另一个线程中断,该线程以某种方式破坏了第一个日期对象?我知道如果这段代码确实是线程不安全的,我可以锁定对 C# isHoliday() 静态函数的所有调用。
请注意,我的代码可以正常工作。
我知道QLNet,它是 QuantLib 的 .Net 端口。我更喜欢使用 QuantLib,因为它似乎有更好的支持。