일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 그리디 알고리즘
- 디자인패턴
- 렌더링 파이프라인
- 백준
- 다이나믹프로그래밍
- DirectX12
- 영속성
- I/O장치
- 컨디션 변수
- 동적계획법
- codility
- Direct12
- 자료구조
- 다이나믹 프로그래밍
- OS
- 운영체제
- directx
- 스케줄링
- 알고리즘
- DirectX 12
- 멀티프로세서
- 멀티쓰레드
- 프로그래머스
- 파일시스템 구현
- 병행성 관련 오류
- 그리디알고리즘
- 병행성
- 쓰레드
- 타입 객체
- 락
- Today
- Total
목록병행성 (3)
기록공간

Fetch-And-Add 마지막 하드웨어 기반의 기법은 Fetch-And-Add 명령어로 원자적으로 특정 주소의 예전 값을 반환하면서 값을 증가시킨다. C, C++ 코드로 표현하면 다음과 같다. // C int FetchAndAdd(int *ptr) { int old = *ptr; *ptr = old + 1; return old; } // C++ #include int FetchAndAdd(std::atomic_int &ptr) { return ptr++; } C++ 코드를 보면 atomic_int이 보일 것이다. 이건 무엇일까? C++11부터 지원하는 Atomic 자료구조이다. 이것은 기본 자료 구조의 일부를 원자적으로 구현해놓은 것이다.(char, int, short, bool) Atomic 자료구조..

이번 장에서는 프로세스를 위한 새로운 개념인 쓰레드(thread)를 소개한다. 프로그램에서 한 순간에 하나의 명령만을 실행하는 고전적인 관점에서 벗어나 멀티 쓰레드 프로그램은 하나 이상의 실행 지점(독립적으로 실행 가능한 Program Counter값)을 가지고 있다. 멀티 쓰레드와 프로세스의 차이가 있다면 주소 공간을 공유하기 때문에 동일한 값에 접근할 수 있다. 하나의 쓰레드 상태는 프로세스의 상태와 매우 유사하다. 쓰레드는 프로그램 카운터(PC)와 연산을 위한 레지스터들을 가지고 있다. 만약 두 개의 쓰레드(T1, T2)가 하나의 프로세서에서 실행 중이라면 실행하고자 하는 쓰레드(T1)는 반드시 문맥 교환(context switch)을 통해서 실행 중인 쓰레드(T2)와 교체되어야 한다. 문맥 교환은..

운영체제는 여러 가지 일을 동시에 수행하고 있다. 프로세스를 하나 실행하고, 다음 프로세스를 실행하고, 또 다음 프로세스를 실행하고... 이 동작을 반복한다. 마치 곡예사가 여러 물건을 저글링 하는 것처럼 말이다. 병행성 문제 현대의 멀티스레드 프로그램은 병행성 문제를 추가로 갖고 있다. 다음 코드를 한번 보자. #include #include using namespace std; volatile int counter = 0; int loops; // 카운터를 증가 시키는 작업을 하는 함수 void worker() { for(int i = 0; i < loops; ++i) ++counter; } int main() { // 두개의 스레드를 만든다. thread p1, p2; cout