본문 바로가기

Programing/멀티코어,병렬,멀티스레드

volatile과 메모리 배리어 이글은 출처글입니다 출처 : http://summerlight.tistory.com/entry/volatile과-메모리-배리어 이전 글에서 volatile 키워드에 대해 간단하게 언급했는데, 핵심은 간단하다. volatile 속성을 가진 변수는 프로그램 밖의 다른 문맥들에 의해서도 비동기적으로 접근될 수 있다. 따라서 특정 쓰레드가 해당 변수에 하는 작업들은 다른 모든 문맥들 역시 볼 수 있어야 한다는 것이다. 하드웨어를 직접 제어하기 위해 Memory-mapped I/O를 하는 경우가 가장 대표적인 예이다. 고로, 프로그램 문맥 상에서는 레지스터만을 이용해서 똑같은 일을 할 수 있는 경우라 해도 가시성의 확보를 위해 컴파일러는 해당 작업을 메모리에도 저장하도록 코드를 만든다. volatile 속성을 가.. 더보기
CriticalSection에 관해.. 출처 http://kuaaan.tistory.com/99 Q1: 동일한 스레드에서 동일한 CriticalSection에 두번 진입하면 Block이 걸릴까? A1: 아니다. 스레드가 이미 자신이 소유한 CriticalSection을 다시 소유하려고 시도하는 것은 전혀 문제될 것이 없다. CriticalSection 개체는 내부적으로 LockCount와 OwningThread라는 멤버가 있어서 자신이 몇번 Lock이 걸렸는지와 어느 스레드에 소유되었는지를 기억하고 있다. 다른 스레드가 소유한 CriticalSection 개체에 대해 EnterCriticalSection을 시도하면 당연히 Block되겠지만, CriticalSection을 소유한 스레드가 다시 EnterCriticalSection을 시도하면 즉.. 더보기
multi thread 환경에서 동기화 및 stl 사용법 출처:http://process3.blog.me/20021963684?Redirect=Log [STL & MFC Collection 사용상 주의] -여러 스레드에서 읽는 것은 안전하다. -여러 스레드에서 각각 다른 컨테이너(컬렉션)에 쓰는것은 안전하다 [위 두 가지 경우 이외에는 전부 안전하지 않다. (모두 동기화(lock)을 걸어주어야 함) ] -삽입 ,삭제, 조회를 하는 모든 경우에 동기화 -반복자를 수행하는 전부 동기화 [연속 메모리 기반, 노드 메모리기반 STL 컨테이너 차이점을 확실히 알고 사용한다] 더보기
CreateMutex 를 이용한 하나의프로세스 돌리기, bInitalOwner 인자값 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, Wa.. 더보기