Q&A

  • CriticalSection에 대한 애매한 질문입니다.
아래의 1번과 2번의 로직이 서로 틀린지를 고수님께 물어보고 싶습니다.

환경은 2CPU의 하이퍼스레딩 환경에서 작업을 가정하여 주세요..


--- 1번 예제 --


function TMainF.PushMsgSendBuf(cmd:TCMD; var ip:String):Boolean;
var
     Inx,
     NextInx : Integer;
begin
     EnterCriticalSection(CSMsgSend);
     try
    
           .....로직.....
          
     finally
          LeaveCriticalSection(CSMsgSend);
     end;
end;

procedure test;
var
     ip : String;
     cmd:TCMD;
begin
     if PushMsgSendBuf(cmd, ip)  then
                     .....;
end;



--- 2번 예제 --


function TMainF.PushMsgSendBuf(cmd:TCMD; var ip:String):Boolean;
var
     Inx,
     NextInx : Integer;
begin
     .....로직.....
          
end;

procedure test;
var
     ip : String;
     cmd:TCMD;
    rst : Boolean;
begin
     EnterCriticalSection(CSMsgSend);
     rst :=  PushMsgSendBuf(cmd, ip);
     LeaveCriticalSection(CSMsgSend);


     if rst then
           .....;
end;
0  COMMENTS