2014-02-11 3 views
5

Windows 플랫폼에서 TCriticalSection은 Windows API EnterCriticalSection/LeaveCriticalSection을 호출하여 구현됩니다. Microsoft 문서는 스레드가 중요한 섹션의 소유권을 가지면 EnterCriticalSection을 추가로 호출 할 수 있다고 명시 적으로 말합니다.스레드가 TCriticalSection.Acquire를 두 번 이상 안전하게 호출 할 수 있습니까?

지금까지 그렇게 좋았습니다.

하지만 OSX, iOS, Android 등 델파이가 지원하는 다른 플랫폼에서의 동작은 어떻습니까?

다른 플랫폼은 TMonitor를 사용하는 것으로 보입니다. 따라서 질문은 TMonitor에 대해 다시 작성 될 수 있습니다.

답변

4

Windows 이외의 다른 플랫폼에서 TCriticalSection을 구현하면 단순히 TMonitor가 사용됩니다. 따라서 귀하의 질문에 대한 답변은 TMonitor.Enter의 동작으로 줄어 듭니다. 최소한 설명서에는 TMonitor.Enter가 재진입 가능하다고 나와 있습니다.

documentation의이 부분

은 "예"당신의 대답에 의미 :

모든 다른 스레드의 접근하지만, 지정된 객체로 호출을 금지합니다.

이 TMonitor의 관련 코드 부분은 TMonitor.TryEnter에 있습니다

+0

이 TMonitor이 XE5에서 신뢰할 수

function TMonitor.TryEnter: Boolean; begin if FOwningThread = GetCurrentThreadId then // check for recursion begin ... Result := True; ... 
? 이전 Delphi 버전은 TMonitor의 문제점을 노출했습니다. – whosrdaddy

+0

@Uwe Raabe TCriticalSection은 TMonitor를 사용하지만 DocWiki/XE5에 문서화 된 TMonitor를 찾지 못했습니다. TMonitor를 추가하기 위해 내 질문을 편집했습니다. – fpiette

+0

@whosrdaddy 오래된 Delphi 버전은 상관하지 않습니다. 나는 XE5를 사용하고있다. – fpiette

관련 문제