[1부] 동기화
01장 스레드와 동기화
1.1 동기화를 위한 사전 지식
1.1.1 프로세스
1.1.2 커널 객체와 핸들 테이블
1.1.3 스레드
1.1.4 스레드 스케줄링
1.2 스레드 동기화란?
1.2.1 동기화의 필요성
1.2.2 동기화의 목적과 방법
02장 커널 객체와 동기화
2.1 스레드 동기화 API
2.1.1 스레드 대기 함수
2.1.2 대기 함수와 커널 객체
2.2 데이터 보호를 위한 동기화 객체
2.2.1 뮤텍스(Mutex)
2.2.2 세마포어(Semaphore)
2.3 흐름 제어를 위한 동기화 객체
2.3.1 이벤트(Event)
2.3.2 대기가능 타이머(Waitable Timer)
2.4 통지를 위한 추가사항 고찰
2.4.1 스레드 메시지 큐와의 연동
2.4.2 콜백 함수와의 결합
2.4.3 .NET BackgroundWorker 클래스의 구현
03장 유저 모드 동기화
3.1 유저 영역의 동기화 객체
3.1.1 크리티컬 섹션(Critical Section)
3.1.2 SRW-락(Slim Reader-Writer Lock)
3.1.3 조건 변수(Condition Variables)
3.2 상호잠금(Interlocked) API
3.2.1 상호잠금 함수의 사용 예
3.2.2 상호잠금을 이용한 스핀락 구현
3.3 새로운 동기화 수단
3.3.1 동기화 장벽(Synchronization Barrier)
3.3.2 주솟값에 대한 대기
3.3.3 원-타임 초기화(One-Time Initialization)
[2부] 비동기 입출력
04장 파일, 비동기 입출력과 IOCP
4.1 파일 커널 객체
4.1.1 파일 생성 및 입출력
4.1.2 파일에 대한 작업
4.1.3 CreateFile을 통한 다른 장치 열기
4.1.4 동기적 입출력의 취소
4.2 비동기 입출력의 기본
4.2.1 비동기 입출력을 위한 사전 지식
4.2.2 장치 또는 이벤트 시그널링
4.3 경보가능 입출력(Alertable I/O)과 APC
4.3.1 비동기 프로시저 호출(APC)
4.3.2 경보가능 입출력의 사용
4.3.3 입출력과 상관없는 APC의 사용
4.4 입출력 완료 포트(IOCP)
4.4.1 IOCP의 생성
4.4.2 스레드 풀 구성하기
4.4.3 입출력과 상관없는 IOCP의 사용
4.4.4 IOCP 내부 들여다보기
4.4.5 IOCP 확장 함수
4.5 비동기 입출력의 취소
4.5.1 핸들 닫기
4.5.2 취소 함수
05장 비동기 소켓
5.1 소켓 API의 기본
5.1.1 동기 모델의 C/S
5.1.2 동기 함수의 비동기화
5.2 비동기 소켓
5.2.1 고전적 방식(select)
5.2.2 윈도우 메시지(WSAAsyncSelect)
5.2.3 이벤트 시그널링(WSAEventSelect)
5.3 비동기 입출력 이용
5.3.1 장치 또는 이벤트 시그널링
5.3.2 경보가능 입출력의 사용
5.3.3 IOCP의 사용
5.4 MS 소켓 확장 API
5.4.1 확장성을 위한 준비
5.4.2 비동기 입출력 접속
5.4.3 AcceptEx 함수와 소켓 풀
5.4.4 파일 전송
06장 스레드 풀
6.1 스레드 풀의 의미와 구현
6.2 윈도우 2000의 스레드 풀
6.2.1 작업(QueueUserWorkItem)
6.2.2 대기(RegisterWaitForSingleObject)
6.2.3 타이머(CreateTimerQueueTimer)
6.2.4 입출력(BindIoCompletionCallback)
6.3 새로운 스레드 풀 I
6.3.1 작업 항목 객체와 스레드 풀
6.3.2 작업(TP WORK) 객체
6.3.3 대기(TP WAIT) 객체
6.3.4 타이머(TP TIMER) 객체
6.3.5 입출력(TP IO) 객체
6.3.6 콜백 인스턴스 사용하기
6.4 새로운 스레드 풀 II
6.4.1 스레드 풀 객체
6.4.2 콜백 환경 객체
6.4.3 정리그룹 객체
07장 IPC와 비동기 입출력
7.1 IPC를 위한 준비 작업
7.1.1 프로세스의 생성
7.1.2 커널 객체의 공유
7.1.3 프로세스 간 데이터 공유
7.2 서비스와 커널 객체 보안
7.2.1 윈도우 서비스의 기본
7.2.2 서비스와 접근 제어
7.2.3 서비스에서의 프로세스 생성
7.3 메모리 매핑 파일
7.3.1 MMF의 의미와 사용
7.3.2 공유 메모리
7.3.3 서비스에서의 MMF 사용
7.4 파이프
7.4.1 파이프 소개
7.4.2 파이프의 사용
7.4.3 서비스에서의 파이프 사용