|
어느걸 쓰셔도 무방합니다만... Synchronize와 CriticalSection은 적제적소에 사용하시는것이 좋습니다.
Synchronize는 그 함수 전체가 동기화 되기 때문에 간단한 함수를 동기화 시킬때 편리합니다. 그렇지만 만약 하나의 함수에서 상당히 많은 작업을 처리하는 경우, 즉, 처리시간이 길어지는 경우 전체를 동기화시키는건 바보짓이겠죠.
이런 경우는 크리티컬섹션을 써서 부분부분 충돌이 일어날 가능성이 있는 부분만 동기화 하시는 것이 훨씬 효율적입니다.
또한 Thread에서는 오직 공용으로 사용하는 기본타입의 변수(즉, int, double등등 한번의 연산으로 처리되는것들)를 reading만 하고 write는 다른 한 곳(예를 들면 메인 쓰레드에서만) 한다면 굳이 CriticalSection으로 동기화 시킬 필요도 없습니다. 그냥 마구 읽어도 전혀 무방합니다. 물론 스트링을 그런식으로 처리하면 난리나겠죠. ^^
동기화는 항상 희생이 따릅니다. 희생을 최소화 하는 방향으로 잘 선택해서 사용하세요
하안인 님이 쓰신 글 :
: 쓰레드에서 동기화 시킬때
: Synchronize() 대신에 CriticalSection을 사용해도 마찬가지 아닌가요.
:
: Synchronize안에 함수는 인자를 전달할 수 없어서 .....
:
: 인디에서 TidTcpServer의 Execute에서
: 폼의 컴포넌트에 접근하려고 하는데
: 전달받은 문자를 보여주려고 할때 함수는 호출할수 있어도 문자값을 전달할 수 없어서요.
|