나는 지정된 날짜가 주어진 국가의 휴일인지를 결정할 필요가있는 C# 프로젝트를 가지고있다. 이 목적으로 QuantLib에 날짜 및 캘린더 기능을 사용할 수 있습니다. QuantLib은 C++로 작성되었으므로이 코드를 호출하는 래퍼를 작성했습니다. 사용중인 코드가 스레드로부터 안전한지 알고 싶습니다.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);
:
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#을 서명입니다 : 여기
는 QuantLib 내가 주어진 날짜가 휴일인지 확인하기 위해 C++에서 사용하는 호출이다내가 QuantLib 코드에 대해 가장 많이 찾은 것은 here입니다. 거기에 thread-unsafe는 보이지 않지만 확실하지는 않습니다. 더 일반적으로, 내 QuantLib의 사용에 관계없이이 스레드 안전 C와 같은 코드를 호출하고 있습니까? 한 스레드가 날짜 객체를 만드는 동안 다른 스레드에 의해 중단되어 어떤 방식 으로든 첫 번째 객체를 손상시킬 수 있습니까? 이 코드가 실제로는 thread-unsafe 인 경우 C# isHoliday() 정적 함수에 대한 모든 호출을 잠글 수 있다는 것을 알고 있습니다.
참고로 내 코드는 정상적으로 작동합니다.
제가 알고있는 QLNet은 QuantLib의 .Net 포트입니다. 나는 더 나은 지원을 가지고 있기 때문에 QuantLib을 사용하는 것을 선호합니다.
C++ 래퍼에 mutex 호출을 항상 추가 할 수 있습니다 (예 : [C++ 11]의 'std :: lock_guard'(http://en.wikipedia.org/wiki/C++11) –
QuantLib에 알려진 스레딩 문제가 있습니까? 그렇지 않다면 C++ 베스트 프랙티스를 따라갈 수 있으며 호출 당 기준으로 만 인스턴스를 유지하면됩니다. – Mgetz