I/O 요청을 등록하고, 디바이스 드라이버가 I/O 요청을 처리하기 이전에 앞서 요청했던 I/O 작업을 취소하고 싶을 수있다. 윈도우에서는 이를 위해 CancleIo와 CancleIoEx 함수를 제공한다. CancleIo BOOL WINAPI CancelIo( _In_ HANDLE hFile ); 지정된 핸들에 대해 진행 중인 I/O작업이 있고, 해당 함수를 호출 하는 스레드에서 실행된 경우 CancleIo 함수는 이를 취소한다. I/O작업은 Overlapped I/O로 실행될때만 유효하다. 취소된 모든 I/O작업은 ERROR_OPERATION_ABORTED를 포함하여 완료되며, I/O 작업에 대한 모든 완료통지는 정상적으로 발생한다. 해당 함수는 핸들이 IOCP와 연계되어 있는 경우 사용하기 힘들다. ..
lock_guard std::lock_guard - cppreference.com template class lock_guard; (since C++11) The class lock_guard is a mutex wrapper that provides a convenient RAII-style mechanism for owning a mutex for the duration of a scoped block. When a lock_guard object is created, it attempts to take en.cppreference.com lock_guard란 c++11 부터 제공되는 클래스이다. C++의 RAII(Resource Aquisition Is Initailiza..
쓰레드 생성 CreateThread HANDLE CreateThread( [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] SIZE_T dwStackSize, [in] LPTHREAD_START_ROUTINE lpStartAddress, [in, optional] __drv_aliasesMem LPVOID lpParameter, [in] DWORD dwCreationFlags, [out, optional] LPDWORD lpThreadId ) dwStatckSize 스레드 스택의 크기 프로세스가 시작되면 내부적으로 CreateThread 함수를 호출하여 프로세스의 주 스레드를 초기화한다. 이때, CreateProcess는 실행 파일 내부에 저장..
여러개의 스레드가 공유자원을 쓰고있을 때, 해당 공유자원이 있는 임계 영역(Critical Section)에 동시에 접근하게 되면, 공유 자원에 대한 접근이 어떤 순서로 이루어졌는지에 따라 실행 결과가 같지 않고 실행할때 마다 달라지는 경쟁 상태(Race Condition)이 발생하게 된다. 따라서 해당 문제를 해결하기 위해 한 스레드가 임계 영역에 접근하면 다른 스레드들은 이 스레드가 이용하는 동안 해당 임계영역에 접근 할 수 없도록, 즉 두 개 이상의 프로세스가 동시에 임계영역에 접근하는 것을 막하야하는데, 이를 상호 배제(Mutual Exclusion)라고 한다. 상호배제는 Lock을 통해 달성할 수 있는데, 이 글에서는 Lock을 구현하는 여러가지 방법중 스핀락(SpinLock)에 대해서 알아보고..