У меня есть проект C#, в котором мне нужно определить, является ли данная дата праздником в данной стране. Для этой цели я могу использовать функцию даты и календаря в QuantLib. QuantLib написан на C++, поэтому я написал оболочку для вызова этого кода. Я хотел бы знать, является ли код, который я использую, потокобезопасным.Когда я вызываю код C++ из кода на C#, это поточно-безопасный?
Вот QuantLib вызовы Я использую в C++, чтобы определить, является ли данная дата праздник:
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, который является портом .Net из QuantLib. Я предпочитаю использовать QuantLib, потому что он, похоже, имеет лучшую поддержку.
Вы всегда можете добавлять вызовы мьютекса в свой C++-обертку, например. 'std :: lock_guard' in [C++ 11] (http://en.wikipedia.org/wiki/C++11) –
Имеет ли QuantLib какие-либо известные проблемы с потоками? Если нет, вы можете просто следовать рекомендациям C++ и просто хранить все экземпляры только на основе каждого вызова. – Mgetz