목차
역자 서문 ... 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
닫기