게임강의

[비베] CreateMutex API

컨텐츠 정보

본문


오늘은 CreateMutex 란 API를 써볼꺼야.



 



저 API를 쓰기 위해서 스레드, 교착상태 란 개념을 소지 하고 있어야되.



 



먼저. Mutex가 뭔지를 알아보자.



 



스레드 2개가 있어. 다중스레드지.



%BD%BA%B7%B9%B5%E5_1_kgs09140.jpg?type=w



 



나의 발그림이 어떠냐! 하튼 이해를 돋구기 위해 내가 그림을 그려줬지.



 



스레드의 특징중 하나가 데이터를 공유 가능하다는것이지.



 



하지만 이러한 특징 때문에 문제가 발생하지.



%BD%BA%B7%B9%B5%E5_2_kgs09140.jpg?type=w%BD%BA%B7%B9%B5%E5_3_kgs09140.jpg?type=w%BD%BA%B7%B9%B5%E5_4_kgs09140.jpg?type=w




 



쉽게 말하자면 그냥 어떤 넘이 과자 잘먹고 있는데



드립쳐서 과자가 없어지는 그거야. 개빡치지?



 



프로글래머들도 마찬가지야. 원래 나와야 되는 값이 나와야 하는데



스레드가 잠시 쉴때 스레드2가 드립쳐서 값이 달라지면 되게 빡쳐..



그런 관계를 교 착 관 계 라고해.



 



 



그 래 서 !



가만히 있을 MS가 아니란 말이지. 저런 교착관계를 해결하기 위해 우리



MS가 해결한 방안이 바로 뮤텍스 야.



 



 



 



 



본격적으로 인자값을 보자.



 




     
 

 Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" 



(lpMutexAttributes As SECURITY_ATTRIBUTES, _



 ByVal bInitialOwner As Long, _ 



 ByVal lpName As String) As Long



 


 
     


 



 



 



lpMutexAttributes : 보안 구조체야. 우리는 필요 없으니. 0& 으로 넣어주자.



bInitialOwner : 호출스레드 가 될꺼냐 안될꺼냐야. True 해두자. 그래야지만 그 데이터를 가지고 있으니까.



lpName : 뮤텍스로 만들 개체를 설정하는거야.



 



여휴. 짧으니까 좋네. 이번 강좌에는 내 강좌에 만년인 예제가 없어.



너네들은 좋지 몰라도 나는 귀찬아.



 



멀티 스레드 할때 꼭 알아야 하니까. 외워도



 



아참! 까먹었어.



해제는 필수란거 알지? 개체에서



 



모든 개체들은 2가지를 거져.



1.[End/Release]개체 이름.



2.CloseHandle.



 



일단은 Release로 개체 공간을 비워도



그후에 핸들을 소멸 시키는 거지.



 



우리는 Mutex니까.



ReleaseMutex겠지?




     
 

Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As LongAs Long



 



Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long


 
     


사용은 간단하니까 걱정마.



둘다 CreateMutex로 만든 개체 핸들의 변수를 집어 넣으면 되니까.


관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 등록자 벼배릅 등록일 04.14
알림 0