HANDLE WINAPI CreateMutex(
  __in_opt  LPSECURITY_ATTRIBUTES lpMutexAttributes,
  __in      BOOL bInitialOwner,
  __in_opt  LPCTSTR lpName
);


//중복 프로세스 실행 방지.
HANDLE hMu=CreateMutexA(NULL, FALSE,"abcde");
 if(GetLastError() == ERROR_ALREADY_EXISTS)
 {
  CloseHandle(hMu);
  MessageBoxA(NULL, "ABC","ABC",MB_OK);
  exit(1);
 }

bInitalOwner 값이 true 이면 뮤텍스를 생성한 스레드가 소유권을 가지게 되고
false 이면 가지지 않게끔 생성.

WaitForSingleObject, WaitForMultipleObjects 등의 함수 사용시
해당스레드가 소유권을 가지게 됨.
소유권은 ReleaseMutex를 호출하거나 해당 스레드가 종료 될때까지 유지됨.
이때 Wait함수 호출시 bInitalOwner가 TRUE일경우 소유권이 중첩되게 되고
ReleaseMutex를 한번 호출해서 중첩된 소유권이 모두 사라지지않는다...

그래서 bIntialOwner를 FALSE 로 생성하는게 편하다.

출처: http://sinarn.blog.me/130078038010 


Posted by 패스맨

댓글을 달아 주세요

출처 :  http://blog.naver.com/neojzs.do


1. 컴파일러의 최적화 옵션에서 '속도 최적화'대신에 '코드 크기 최소화' 설정이 캐쉬 성능을 향상시켜 좀 더 빠른 코드를 얻을 수 있게 한다.

2. 각 CPU(인텔의 SSE, SSE2 / AMD의 3DNow )의 SIMD 를 활용하는 함수를 만들어 사용해라

3. 가능한 나눗셈 연산을 최소화해라.
예)
<수정전>
b = a / m;  
c = d / m;

<수정후>
m = 1 / m;
b = a * m;
c = d * m;

4. switch문을 쓸 때 연속된 수치를 사용해라. 그러면 VC가 컴파일할 때 테이블형태로 만들어 조건분기보다 빠르게 사용된다.
예)
case 0 :  
case 1 :
case 2 :

예2)
case 10 :
case 9 :
case 8 :

잘못된 예)
case 2 :
case 4 :
case 3 :

5. 펜티움 Pro이상에서는 CMOVxx / FCMOVxx 같은 조건적 이동 명령을 이용할 수 있다. 간단한 내용은 IF문보다 다음과 같은 코드를 사용해라.

A == 0 ? choice1 : choice2;

6. 자주 사용하는 자료 구조는 32바이트의 배수로 정렬시켜 사용해라. 컴퓨터의 캐쉬라인을 최적으로 사용할 수 있기 때문에 전체 성능이 크게 좋아진다. 펜티움 4는 L1의 캐시라인크기가 64바이트이고 L2가 128바이트, AMD 애슬론은 L1, L2가 64바이트이다. 이 기법을 패딩(Padding)이라고 한다.

7. sin, cos, tan, exp, arcsin등의 수학 함수는 가급적 피하고 룩업 테이블이나 비슷한 형태로 간략하게 함수로 만들어서 사용해라.

8. 부동 소수점은 가급적 double보다 float를 사용해라. double의 나눗셈은 39사이클이 걸리지만 float은 19사이클만 걸린다. (단, 2의 제곱수로 나누면 8사이클정도만 걸린다) 그리고 float형 일때는 반드시 뒤에 f를 붙여라. float a = 1.0; 보다 float a = 1.0f; 가 더 빠르다.

9. 순서에 상관이 없다면 후연산자 보다 선연산자를 사용해라. a++; 보다 ++a;를 사용하라는 것이다.

10. 가능하다면 const를 사용해라. 컴파일러가 좀더 최적화가 잘 해줄 가능성이 생기게 된다.

11. 메모리 관리 함수는 따로 만들어서 사용하는 것이 좋다. malloc과 free는 느리기 때문에 시작할 때 메모리를 많이 잡은 뒤 관리해서 사용하는 것이 좋다. 퀘이크1 이 좋은 예이다

'Programing > 메모리 관리' 카테고리의 다른 글

코드 최적화에 대한 Tip  (0) 2010.09.21
Posted by 패스맨

댓글을 달아 주세요


군생활 체험 게임.
첫 팀프로젝트.

visual studio 2005
cdx lib

Posted by 패스맨

댓글을 달아 주세요