Microsoft MVP성태의 닷넷 이야기
UI Thread에 Invoke 처리관련 궁금합니다. [링크 복사], [링크+제목 복사],
조회: 12229
글쓴 사람
감사합니다.
홈페이지
첨부 파일
 

안녕하세요?
항상 도움주셔서 감사합니다.

UI Thread에 Invoke 처리관련 궁금한 점이 있어서 질문드립니다.
아래와 같이 멀티스레드로 동작하는 threadFunc()함수가 있습니다.
private void threadFunc()
{
    lock(lockobj)
    {
        mainForm.Invoke((MethodInvoker)(() =>
        {
            //멀티스레드간 동기화가 필요한 코드
        }));
    }
}

"//멀티스레드간 동기화가 필요한 코드" 부분을 메인 UI Thread에 Invoke 시켜서 처리할 경우
lock(lockobj) 부분이 없어도 무방한지 궁금합니다.

제가 생각할 때는 메인 UI Thread에 Invoke 시켜서 처리할 경우
메인 UI Thread 내에서 순차적으로 처리되기 때문에 마치 멀티스레드간 동기화가 된 것과 같이 동작하기 때문에
lock(lockobj) 부분은 없어도 될것 같은데 잘못 생각한 것일까요?

답변 주시면 감사하겠습니다.

감사합니다.









[최초 등록일: ]
[최종 수정일: 12/29/2022]


비밀번호

댓글 작성자
 



2022-12-29 07시40분
[guest] 2가지 경우를 나누어 직접 시험해보세요^^ 근데 lock을 안하려고 thread 쓰는 것 아닌가요? 그리고 task를 이용하라고 하더라고요 thread보다
[guest]
2022-12-29 08시02분
네, 생각하신 것이 맞습니다. 어차피 UI 스레드에서 직렬화되어 실행되므로 lock을 할 필요가 없습니다.

참고로, 그 코드에서 오히려 멀티 스레드에 대해 걱정해야 할 것은 Invoke 메서드의 사용입니다. 닷넷 BCL의 대부분은 정적 메서드가 아니라면 thread-safe하지 않은데요, 다음의 문서에 나오듯이,

Control.Invoke Method
; https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.invoke

대상 컨트롤만 (위 코드 예제의 경우 mainForm) 정상적으로 생성된 이후라면 Invoke/BeginInvoke/EndInvoke/CreateGraphics 메서드는 모두 thread-safe하다고 명시하고 있습니다.
정성태
2022-12-29 09시47분
[감사합니다.] 긴가민가 했었는데 답변 주셔서 감사합니다.
[guest]

... 46  47  48  49  50  51  52  53  [54]  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1343h11/2/201420869안녕하세요 [1]
1342왕초보11/1/201425383C#에서의 함수포인터 [13]
1347왕초보11/5/201420090    답변글 [답변]: C#에서의 함수포인터 [1]
1341영택10/29/201421436MFC Amazon S3 사용관련하여 질문드립니다. [2]
1344영택11/4/201417775    답변글 [답변]: MFC Amazon S3 사용관련하여 질문드립니다. [2]
1340감사합니다10/28/201422527c# wpf shdocvw internet explorer를 윈도우프레임으로 집어 넣을 수 있는지 궁금합니다. [3]파일 다운로드1
1338헬프미10/28/201423413tcp 소켓의 SYN_RECV 상태에 대하여 질문있습니다. [3]
1336이소정10/27/201418288filestream seek에 대해 질문있습니다. [1]
1337이소정10/28/201419390    답변글 [답변]: filestream seek에 대해 질문있습니다.파일 다운로드1
1339이소정10/28/201422471        답변글 [답변]: [답변]: filestream seek에 대해 질문있습니다. [2]파일 다운로드2
1335황지혜10/24/201423085psexec 관련 질문드립니다. [1]
1334dell10/24/201418984여기가 있는줄 모르고 방명록에 남겼네요 ㅠㅠ 방명록 한번만 봐주시면 안될지요? [1]
1333왕초보10/24/201419351Bitmap 질문 [5]
1332김동진10/16/201425971clickonce 와 smartscreen filter 기능에 대해서 [2]
1331궁굼합니다10/8/201419438loopback adapter 자동 설치가 가능 한가요? [2]
1330이현중10/8/201422198파일 다운로드 방법 문의 [2]파일 다운로드1
1329popo10/2/201419529싱글톤과 싱글톤 소멸자에 대해 궁금점이 있습니다. [1]
1328달쏭9/25/201420545WCF Service측에서 parameter 값이 null이 오는 이유를 알고 싶어요. [2]
1326궁굼합니다9/19/201419475VB의 Shell 기능과 완벽히 똑같은 기능의 함수 [4]
1325지현태9/18/201419267WPF 의존속성과 바인딩에 대한 질문입니다.. [1]파일 다운로드1
1324popo9/17/201418128wcf 질문 드립니다. [1]
1323Anon...9/17/201420957인스턴스와 객체의 차이 [1]
1322김영대9/16/201420788죄송하지만 .NET 관련 질문게시판이지만 혹시 ASP.NET MVC에 대해서 질문 드려도 됩니까 (__);; [2]
1321부탁드립...9/15/201423089윈도우 어플리케이션 개발 방법(?) 에대해(직접적인 코드라기보단 프로젝트 방향??) [14]
1320소켓서버...9/13/201423455서로다른 포트번호로 로컬 Socket 서버를 개설시 Close 문제 입니다. [2]
1319ㅇㅇ9/12/201423375134쪽 예제 오타 [3]
... 46  47  48  49  50  51  52  53  [54]  55  56  57  58  59  60  ...