본문 바로가기

C67

Chapter 14. 쓰레드 동기화 기법2 - 실행 순서 동기화 14.1 실행 순서 동기화 기법 14.1-1 생산자-소비자 모델 Note) 왜 하필 순서를 동기화하는가? 이게 중요함. 이거에 대해 얘기 해보자. 생산자-소비자 모델은 사실 I/O 모델임. 다른 관점에서는 쓰레드 모델이다.라고도 함. 사실 I/O 모델을 구현하기 위해서 쓰레드 모델이 도입되었다고 해도 무방할 정도. - 어찌되었든 I에 해당하는 입력으로는 네트워트로 부터 들어오는 입력, 콘솔 입력, ... etc 입력된 데이터를 출력 혹은 가공해서 내가 원하는 데로 이용하는 모델이 있다고 가정 해보자. - 이럴 경우에 우리는 보통 쓰레드 모델을 바로 도입 시키기 보단 단순하게 구현함. 일단 입력이 먼저 진행되고 그다음 출력이 진행됨. 즉, 번갈아 가며 입력/출력하면 되는 것. 그냥 While loop로 구.. 2022. 2. 10.
Chapter 13. 쓰레드 동기화 기법1 - 임계 영역 접근 동기화 13.1 쓰레드 동기화란 무엇인가 Prologue) 13장 outline 1. 둘 이상의 쓰레드가 같은 메모리를 접근하는 코드 블럭을 임계 영역이라 함. 그래서 한 순간에 하나의 쓰레드만 임계 영역에 진입할 수 있도록 동기화가 필요함. 2. 이때의 동기화를 정확하게는 메모리 접근 동기화라 함. 또한 메모리 접근 동기화에는 유저 모드 메모리 접근 동기화와 커널 모드 메모리 접근 동기화가 있음. 3. 유저모드를 통한 메모리 접근 동기화: 커널 모드의 도움을 받지 않고 유저가 만든 라이브러리를 통해 메모리 접근 동기화->속도가빠름. 기능은 적음 커널 모드를 통한 메모리 접근 동기화: 커널 레벨에서 직접 제공해주는 기능으로 메모리 접근 동기화하는 기법->속도는느림. 기능은많음. 기능이 많다? 하나의 프로세스 내.. 2022. 2. 9.
Chapter 12. 쓰레드의 생성과 소멸 12.1 Windows에서의 쓰레드 생성과 소멸 12.1-1 쓰레드의 생성 Note) CreateThread() 함수 - lpThreadAttributes: 부모 쓰레드에서 자식 쓰레드에게 핸들 테이블을 상속할지 여부. 즉, 쓰레드도 별도의 자식 쓰레드를 생성할 수 있음. - dwStackSize: 독립적인 스택의 크기를 결정 - lpStartAddress: 함수 포인터. 흔히 쓰레드 메인함수라 부름. - lpParameter: OS가 쓰레드 메인 함수 호출 시 우리 대신 전달해줄 인자값. - dwCreationFlags: 쓰레드 생성 직후, suspend 상태로 둘지 Blocked 상태로 둘지 결정. 메모리 매니지먼트와 관련해서 아주 중요한 매개변수가 됨. 지금은 안씀. - lpThreadId: 이 매.. 2022. 2. 8.
Chapter 11. 쓰레드의 이해 11.1 쓰레드란 무엇인가 Prologue) 11장에서는 쓰레드를 배워 볼 예정. 다만, 프로세스의 내용을 되짚어보면서 쓰레드가 무엇인지 비교해보고 왜 쓰레드가 필요한지를 생각해 보아야 함. 11.1-1 프로세스 Vs. 쓰레드 Note) 멀티 프로세스가 필요한 경우 OS 관점에서는 멀티 프로세스가 필요함. 둘 이상의 프로그램을 실행하기 위해서임. 근데, 지금까지는 대부분 하나의 프로그램 == 하나의 프로세스 즉, 하나의 프로그램은 하나의 코드 실행 흐름을 가짐. 앞으로 개발하다 보면 하나의 프로그램 안에서 둘 이상의 실행 흐름이 필요한 경우가 생기게 됨. ex. 2인 전투 테트리스. 하나의 프로그램에 두 개의 실행 흐름이 생김. 게임을 켰을때 대기방에선 혼자하다가 공방에선 프로세스를 하나 더 생성해서 멀.. 2022. 2. 6.