programing/C++56 쓰레드 사용시에... 1.두 쓰레드가 같은 공간을 접근할 때 경쟁 조건이 생기는데 그래서 보통은 동기화를 사용함 그 중 유저모드 동기화가 빠르다고 해서 주로 사용하긴 했는데 atomic으로 사용해보니 신세계다. 대충 2배 정도 빠른 듯하다. while() 문을 이용하므로 계속 cpu를 점유 하던지 sleep()을 넣어야 한다. 2.두 쓰레드가 매니저(패턴)에 접근시에 이미 만들어져 있으면 큰 문제가 없지만 만들어져 있지 않은 상태로 접근하게 되면 경쟁 조건이 발생하게 되고 나도 모르는 사이에 싱글턴 객체가 두 개가 만들어짐 그래서 종료하다 보면 나도 모르는 메모리 릭이 생긴다. => 동기화, 미리 instance만들기, 더블락 (null 체크 -> 동기화 -> null 체크) 3.static 변수는 함부로 함수로 사용하면 안.. 2017. 3. 7. APC(Asynchronous Procedure Call) - 비동기 함수 호출 - Complete Routine도 APC 활용 - ReadFileEx(), WriteFileEx(), SetWaitableTimer()도 APC 메커니즘 기반 - APC Queue> 비동기 입출력 결과 저장을 위해 운영체제가 각 쓰레드마다 할당하는 메모리 영역> 비동기 함수 호출 메커니즘 의미> 모든 쓰레드는 자신만의 APC Queue를 가지고 있고 쓰레드 별로 독립적임> 쓰레드가 알림가능 상태에 놓이게 될 때 호출 됨 - Alertable wait> 비동기 입출력을 위한 특별한 대기 상태, 비동기 입출력 함수를 호출한 쓰레드가 이 상태에 있어야만 완료 루틴이 호출 될 수 있음 >Sleep() : Wait가 시작되는 시점 부터 Wait가 끝나는 시점까지 CPU시간을 사용하지 않음 .. 2017. 2. 23. VLD(Visual Leak Detector) 사용법 vld.lib 등록한 다음 실행파일 위치에 vld_x86.dll(vld_x64.dll), dbghelp.dll, 'Microsoft.DTfW.DHL.manifest'을 넣어 놓고 vld.h vld_def.h 위치를 설정하고 vld.h를 인클루드 하면 된다. ps. vld를 제거 했는데 속성에 남아서 상속이 된게 귀찮다면 속성 관리자 -> Microsoft.CppWin32.user에서 추가 포함된 디텍터리, 라이브러리 디렉터리 등을 설정해준다 ps. crtdbg 대신 vld를 사용하는 이유 : The main difference between the CRT Debug Library and VLD, is that Visual Leak Detector shows you the complete callstack.. 2017. 2. 22. 포인터 - void 포인터 > void포인터는 무엇이든 받을 수 있다 > 하지만 void포인터로 delete를 사용하면 소멸자가 호출이 안됨 > 또한 포인터 연산도 할 수 없다. > 상속 구조의 업 캐스팅과는 다르니 주의 해야 함 > 일단 주소값에 의미를 두고 자료값은 나중에 생각하는 개념 - 포인터 연산 > 포인터 자료형에 따라 연산이 된다 > 1을 더했을 경우 그 자료형 만큼 포인터를 이동하게 된다 > 하지만 void 포인터 같은 경우 크기가 없다고 취급하는지 연산을 할 수 없다. > 일반적으로 포인터로 1byte 연산하려면 BYTE* 나 char*를... > char* 같은 경우 VS에서 디버깅할 때 문자열 데이터인 경우 문자열을 보여주니 편하다. 2017. 2. 17. 이전 1 2 3 4 5 6 7 8 ··· 14 다음