gpt4 book ai didi

c# - 当我从 C# 代码调用 C++ 代码时,它是线程安全的吗?

转载 作者:行者123 更新时间:2023-11-30 02:50:07 25 4
gpt4 key购买 nike

我有一个 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 代码的最多的是 here .那里看起来没有线程不安全的东西,但我不能确定。更一般地说,不管我使用 QuantLib,像这样调用 C++ 代码是线程安全的吗?是否有可能一个线程在创建日期对象时被另一个以某种方式破坏第一个日期对象的线程中断?我知道如果此代码确实是线程不安全的,我可以锁定对 C# isHoliday() 静态函数的所有调用。

请注意,我的代码按原样运行良好。


我知道 QLNet这是 QuantLib 的 .Net 端口。我更喜欢使用 QuantLib,因为它似乎有更好的支持。

最佳答案

QuantLib 中有很多东西不是线程安全的(这表明肖恩的回答是正确的:总是检查!)但是这个特别的东西是安全的,除了一件事:UnitedStates 实例将在构造函数中初始化一个静态变量,因此您可能需要处理这种情况。一旦构建了第一个实例,就可以安全地在并行线程中构建其他实例。

Date 实例的构造和对 isHoliday 的调用都是安全的。

关于c# - 当我从 C# 代码调用 C++ 代码时,它是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705116/

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