티스토리 뷰
Mutual Exclusion - algorithm for critical section
공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘
Concurrent Programming 이 어려운 이유 : unpredictable 예측할 수 없다
#include <iostream>
#include <thread>
int a;
void foo()
{
for (int i = 0; i < 100000; i++) {
a++;
}
}
int main()
{
a = 0;
std::thread thread1(foo);
std::thread thread2(foo);
thread1.join();
thread2.join();
std::cout << a << '\n';
// a is predictable??
return 0;
}
Time : 시간의 흐름
Event : 즉시 실행됨, 하나의 쓰레드에서 동시에 실행되지 않음.
Thread : Thread Events들의 순차적 모음
Threads = State Machine
Events = transitions
Thread A, B 는 Interleaving하게 실행
ㄴ Interleaving - 여러 프로세스들이 번갈아 가며 실행
Interval : A의 이벤트 사이의 시간 An = (an, an+1)
A0 -> B0 : A0가 B0의 시작지점보다 먼저 끝남 (happens before)
Lock (mutual exclusion)
Precedence order 가 필요한 구간에서 Lock을 사용
ㄴ Precedence order - 순서를 정할 수 있어야함 (겹치지 않음)
Deadlock-Free
하나의 쓰레드가 lock을 잡고 있지 못한다면, 다른 쓰레드가 lock을 잡고있다가 unlock을 할 것이다
some processes will make progresses, but others might be stuck(starving)
Starvation-Free
접근하는 모든 쓰레드가 lock을 잡는다.
every process trying to get into critical section, will eventually do so
Peterson's Algorithm - flag, victim
Filter Algorithm - using level
Bakery - using label
'개발 > 병렬프로그래밍' 카테고리의 다른 글
[병렬프로그래밍] Universality of Consensus (0) | 2019.12.17 |
---|---|
[병렬프로그래밍] Consensus (0) | 2019.12.17 |
[병렬프로그래밍] Shared Memory (0) | 2019.12.17 |
[병렬프로그래밍] Concurrent Objects (0) | 2019.12.17 |
병렬프로그래밍 정리 시작 (0) | 2019.12.17 |
- Total
- Today
- Yesterday
- RVO
- 카카오
- shared_from_this
- Golang
- vr핏
- 클래스 맴버 변수 출력하기
- ad skip
- 코어 남기기
- 잘못된 빨간줄
- set value
- Quest2
- boost
- Reciprocal n-body Collision Avoidance
- 에러 위치 찾기
- 면접
- C++
- mysql
- red underline
- SuffixArray
- cockroach db
- 우리는 vr핏이라고 부릅니다
- it's called a vrpit
- 봄날에 스케치
- 영상 픽셀화 하기
- print shared_ptr class member variable
- vrpit
- hole-punching
- chrome-extension
- Visual Studio
- Obstacle Avoidance
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |