문제

시행 착오를 통해 Matlab 엔진 기능이 완전히 안전하지 않다는 것을 발견했습니다.

누구든지 규칙을 아는 사람이 있습니까?

시행 착오를 통해 발견 :

Windows에서 Matlab과의 연결은 COM을 통해이므로 COM 아파트 스레딩 규칙이 적용됩니다. 모든 통화는 동일한 스레드에서 발생해야하지만 각 연결이 격리되어있는 한 여러 스레드에서 여러 연결이 발생할 수 있습니다.

아래의 답변에서, 이것은 UNIX의 경우가 아닌 것으로 보이며, 호출이 일련의 전화가 이루어지는 한 여러 스레드에서 통화를 만들 수 있습니다.

도움이 되었습니까?

해결책

엔진을 처음 사용하기 시작했을 때 스레드 안전에 대한 문서를 가로 질러 실행되지 않았으므로 스레드 안전이 아니라고 가정했습니다.

C ++ 클래스를 사용하여 엔진 인스턴스에 대한 액세스를 동기화합니다. 보다 병렬 처리 설계를 위해 엔진 클래스의 여러 인스턴스를 인스턴스화합니다.

(편집) Solaris에서 Matlab R14를 사용하고 있습니다. 'Engopen'호출을 사용하여 엔진을 열고 'Engclose'를 사용하여 닫습니다. 닫기가 Open이라고 불리는 것과 다른 스레드로 클로즈를 호출 할 때 내 플랫폼이 충돌하지 않습니다.

다른 팁

로부터 선적 서류 비치,

MATLAB 라이브러리는 스레드 안전이 아닙니다. 멀티 스레드 애플리케이션을 작성하는 경우 하나의 스레드 만 엔진 애플리케이션에 액세스하는지 확인하십시오.

사용자의 관점에서 Matlab의 통역사는 순전히 단일 스레드입니다. 안전하려면 단일 스레드에서 엔진에 모든 액세스를해야 할 것입니다.

내부적으로 Matlab은 많은 스레드를 사용합니다. GUI 스레드가 있으며 마지막 몇 버전에서 통역사는 무대 뒤에서 여러 스레드를 사용할 수 있습니다. 그러나 통역사는 의미 적으로 단일 스레드 통역사 (인터럽트 포함)와 동일합니다.

당신이 사용할 수있는 engOpenSingleUse 사용하는 대신 engOpen 하나 이상의 스레드가 별도로 작동합니다. (창문 만)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top