목차
역자 서문 ... 6
서문 ... 10
1장 소개 ... 23
1.1 공유 객체와 동기화 ... 26
1.2 우화 ... 30
1.3 생산자-소비자 문제 ... 35
1.4 독자-저자 문제 ... 37
1.5 병렬화의 잔혹한 현실 ... 38
1.6 병렬 프로그래밍 ... 41
1.7 일러두기 ... 42
1.8 연습문제 ... 42
1부 원리
2장 상호 배제 ... 49
2.1 시간 ... 49
2.2 임계영역 ... 50
2.3 2-스레드 해법 ... 54
2.4 필터 잠금 ... 58
2.5 공정성 ... 62
2.6 램포트의 빵집 알고리즘 ... 63
2.7 유한 타임스탬프 ... 65
2.8 (메모리) 위치 개수에 대한 하한 ... 69
2.9 일러두기 ... 74
2.10 연습문제 ... 75
3장 병행 객체 ... 81
3.1 병행성과 정확성 ... 83
3.2 순차 객체 ... 85
3.3 정지 무모순성 ... 87
3.4 순차 무모순성 ... 90
3.5 선형화 가능성 ... 93
3.6 수학적 정의 ... 95
3.7 진행조건 ... 99
3.8 Java 메모리 모델 ... 102
3.9 주의할 것 ... 107
3.10 일러두기 ... 108
3.11 연습문제 ... 109
4장 공유 메모리의 기초 ... 115
4.1 레지스터의 공간 ... 116
4.2 레지스터 만들기 ... 123
4.3 원자적인 스냅샷 ... 136
4.4 일러두기 ... 144
4.5 연습문제 ... 146
5장 동기화 연산 요소들의 상대적인 능력 ... 151
5.1 합의 수 ... 152
5.2 원자적인 레지스터 ... 156
5.3 합의 프로토콜 ... 159
5.4 FIFO 큐 ... 160
5.5 다중 대입 객체 ... 164
5.6 읽기-변경-쓰기 연산 ... 168
5.7 Common2 RMW 연산 ... 170
5.8 CAS 연산 ... 173
5.9 일러두기 ... 175
5.10 연습문제 ... 176
6장 합의의 만능성 ... 185
6.1 소개 ... 185
6.2 만능성 ... 186
6.3 무잠금 만능 구성 ... 187
6.4 무대기 만능 구성 ... 192
6.5 일러두기 ... 199
6.6 연습문제 ... 199
2부 실제
7장 스핀락과 경쟁 ... 203
7.1 현실 세계에 온 것을 환영한다 ... 204
7.2 test-and-set 잠금 ... 207
7.3 TAS 기반의 잠금 재검토 ... 210
7.4 지수적인 백오프 ... 211
7.5 큐 잠금 ... 214
7.6 시간제한이 있는 큐 잠금 ... 224
7.7 복합 잠금 ... 227
7.8 계층적 잠금 ... 237
7.9 모든 상황을 처리할 수 있는 하나의 잠금 ... 245
7.10 일러두기 ... 245
7.11 연습문제 ... 247
8장 모니터와 멈춤 동기화 ... 249
8.1 소개 ... 249
8.2 모니터 잠금과 조건 변수 ... 250
8.3 독자-저자 잠금 ... 257
8.4 직접 만든 재진입성 잠금 ... 262
8.5 세마포어 ... 264
8.6 일러두기 ... 266
8.7 연습문제 ... 266
9장 연결리스트: 잠금의 역할 ... 271
9.1 소개 ... 271
9.2 리스트로 만든 집합 ... 273
9.3 병행 추론 ... 275
9.4 성긴 동기화 ... 277
9.5 세밀한 동기화 ... 279
9.6 낙천적인 동기화 ... 284
9.7 게으른 동기화 ... 288
9.8 비멈춤 동기화 ... 294
9.9 토의 ... 300
9.10 일러두기 ... 301
9.11 연습문제 ... 301
10장 병행 큐와 ABA 문제 ... 305
10.1 소개 ... 305
10.2 큐 ... 307
10.3 제한된 부분 큐 ... 307
10.4 무제한 완전 큐 ... 313
10.5 무제한 무잠금 큐 ... 314
10.6 메모리 재사용과 ABA 문제 ... 318
10.7 이중 자료구조 ... 324
10.8 일러두기 ... 327
10.9 연습문제 ... 328
11장 병행 스택과 소거 ... 331
11.1 소개 ... 331
11.2 무제한 무잠금 스택 ... 331
11.3 소거 ... 334
11.4 소거 백오프 스택 ... 336
11.5 일러두기 ... 343
11.6 연습문제 ... 343
12장 숫자 세기, 정렬 그리고 분산 협조 ... 349
12.1 소개 ... 349
12.2 공유된 세기 ... 350
12.3 소프트웨어 결합 ... 351
12.4 정지 무모순한 풀과 카운터 ... 363
12.5 계산 네트워크 ... 363
12.6 회절 트리 ... 378
12.7 병렬 정렬 ... 383
12.8 정렬 네트워크 ... 384
12.9 샘플 정렬 ... 388
12.10 분산 협조 ... 390
12.11 일러두기 ... 391
12.12 연습문제 ... 393
13장 병행 해시와 자연적인 병렬성 ... 399
13.1 소개 ... 399
13.2 닫힌 주소법 해시 집합 ... 401
13.3 무잠금 해시 집합 ... 412
13.4 열린 주소법 해시 집합 ... 422
13.5 일러두기 ... 435
13.6 연습문제 ... 436
14장 스킵리스트와 균형 잡힌 검색 ... 437
14.1 소개 ... 437
14.2 순차 스킵리스트 ... 438
14.3 잠금 기반의 병행 스킵리스트 ... 440
14.4 무잠금 병행 스킵리스트 ... 450
14.5 병행 스킵리스트 ... 462
14.6 일러두기 ... 463
14.7 연습문제 ... 463
15장 우선순위 큐 ... 465
15.1 소개 ... 465
15.2 배열 기반의 제한된 우선순위 큐 ... 466
15.3 트리 기반의 제한된 우선순위 큐 ... 468
15.4 힙 기반의 무제한 우선순위 큐 ... 471
15.5 스킵리스트 기반의 무제한 우선순위 큐 ... 481
15.6 일러두기 ... 485
15.7 연습문제 ... 486
16장 미래, 스케줄링, 그리고 작업 분배 ... 489
16.1 소개 ... 489
16.2 병렬성 분석 ... 497
16.3 현실적인 다중프로세서 스케줄링 ... 501
16.4 작업 분배 ... 504
16.5 작업 훔치기 덱 ... 506
16.6 일러두기 ... 519
16.7 연습문제 ... 519
17장 배리어 ... 525
17.1 소개 ... 525
17.2 배리어 구현 ... 527
17.3 센스리버싱 배리어 ... 528
17.4 트리 결합 배리어 ... 530
17.5 정적 트리 배리어 ... 533
17.6 종료 감지 배리어 ... 535
17.7 일러두기 ... 540
17.8 연습문제 ... 540
18장 트랜잭션 메모리 ... 549
18.1 소개 ... 549
18.2 트랜잭션과 원자성 ... 554
18.3 소프트웨어 트랜잭션 메모리 ... 557
18.4 하드웨어 트랜잭션 메모리 ... 585
18.5 일러두기 ... 589
18.6 연습문제 ... 589
3부 부록
A 소프트웨어의 기초 ... 593
A.1 소개 ... 593
A.2 Java ... 593
A.3 C ... 602
A.4 Pthreads ... 607
A.5 일러두기 ... 612
B 하드웨어의 기초 ... 613
B.1 소개(와 수수께끼) ... 613
B.2 프로세서와 스레드 ... 616
B.3 인터커넥트 ... 617
B.4 메모리 ... 618
B.5 캐시 ... 619
B.6 캐시를 고려한 프로그래밍 또는 수수께끼는 풀렸다! ... 623
B.7 다중코어와 다중스레드 구조 ... 624
B.8 하드웨어 동기화 명령 ... 627
B.9 일러두기 ... 629
B.10 연습문제 ... 629
참고문헌 ... 632
찾아보기 ... 648
닫기