|
ASync Procedure Call 에 대해 찾아보니
APC 는 Asynchronous Procedure Call 의 약자로서, 비동기 함수 호출 메커니즘을 의미 한다라고 나와있는데
전 왜 이 말이 이해가 되질 않는 걸까요..ㅠㅜ 비동기 함수 호출하는 것을 APC라고 하는 건가요??
VOID CALLBACK APCProc( ULONG_PTR );
이런 함수를 호출하는게 APC라는 건가요??
죄송하지만 ASync Procedure Call에 대한 설명 부탁드립니다
그리고 State Variable가 뭔가요?? 검색해 보니깐 수학 공식만 엄청 뜨던데...ㅜ
CreateMutexA(
__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in_opt LPCSTR lpName
);
뮤텍스 매개변수 값은 아닌듯 한데요...
근데 전 뮤텍스 안에서 하는 일이라곤 Q(push())안에 데이터를 집어넣는 일만 합니다..
이런 경우도 문제가 발생할 수 있을까요??
Lyn 님이 쓰신 글 :
: 뮤텍스 안에서 ASync Procedure Call 을 할 경우 무제가 생길 수 있습니다.
:
: Win2008 이후부터는 이것을 해결하기위해 State Variable 이 있구요.
:
:
: 문의드립니다 님이 쓰신 글 :
: : 뮤텍스를 생성한 후 lock을 걸었습니다...
: :
: : 전 뮤텍스를 걸면 다른스레드의 접근이 완전히 차단 되는거라 믿었는데
: : 예외의 경우가 있다네요
: :
: : 그래서 그 경우를 인터넷을 열심히 뒤져 봤지만 그런얘기는 하나도 없더라구요
: : 콘솔환경에서 제작했구요 간단한겁니다
: :
: : 그냥 테스트로 main()함수 하나 만들고 스레드 2개 생성한 뒤에 전역으로 배열하나 만들어서
: :
: : 두 개의 스레드에서 하나는 배열에 데이터를 넣고 다른 하나는 배열에 있는 데이터를 빼서 처리하는 역활을
: : 하는 형식입니다...
: :
: : 뮤텍스 lock을 걸어도 다른 스레의 침입이 가능한 경우가 어떤경우인가요?
: : 변수를 전역으로 쓴다든가 뭐 그런경우도 해당이 되나요??
: :
: : 스레드 내부는
: : while(1) {
: : for () {
: : 뮤텍스.lock()
: : //배열에 데이터입력
: : 뮤텍스.unlock();
: : }
: : }
: :
: : 이런형태로 작성하였습니다....
|