프로그래밍 언어론 · 12강

동시성

여러 일을 한꺼번에 실행하는 프로그램은 무엇이 달라지고, 같은 데이터를 함께 쓸 때 어떤 일이 생기며, 언어는 이를 어떻게 막는지를 봅니다. 프로그래밍을 한 번쯤 해 본 사람을 위해 9편으로 나눠 따라갑니다.

  1. 1한 번에 한 줄만 실행해야 할까?순차와 동시, 네 수준, 물리적 동시성과 논리적 동시성
  2. 2태스크는 함수와 무엇이 다를까?태스크의 뜻, 서브프로그램과 다른 점, 스케줄러와 태스크의 상태
  3. 3같은 변수를 둘이 동시에 고치면?경쟁 조건, 상호 배제, 협력 동기화, 교착 상태
  4. 4숫자 하나로 어떻게 줄을 세울까?세마포어: 카운터와 대기 큐, wait와 release, 이진 세마포어
  5. 5버퍼가 꽉 차면 생산자는 어떻게 될까?생산자와 소비자, emptyspots와 fullspots, access, 세마포어의 약점
  6. 6잠그는 일을 언어가 대신 해 줄 수 없을까?모니터, 메시지 전달과 랑데부
  7. 7Ada 태스크는 메시지를 어떻게 받을까?엔트리와 accept, select, 가드, 보호 객체
  8. 8자바는 스레드를 어떻게 만들고 깨울까?Thread와 run·start, synchronized, wait·notify, C# 스레드
  9. 9반복문 하나를 여러 프로세서가 나눠 돌리면?문장 수준 동시성, 고성능 포트란, 전체 정리

내용과 예제는 Robert W. Sebesta의 《Concepts of Programming Languages》 12판 13장을 따랐습니다.