일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c언어 setvbuf
- 다운캐스팅
- 임베디드 시스템 프로그래밍
- 2019년 회고
- 아두이노
- down-casting
- 피터슨 알고리즘
- 업캐스팅
- 무래함의 비용
- 임계 영역
- 임베디드
- up-casting
- 워치독 타이머
- 데커 알고리즘
- Dekker
- 외부인터럽트
- 리눅스 setvbuf
- AVR
- AVR기초
- 대구소프트웨어고등학교
- peterson 알고리즘
- 데커
- 임베디드시스템프로그래밍
- 임베디드 개발자
- 임베디드 초급
- 리눅스 기초
- 임베디드 입문
- setvbuf
- 코딩
- 데커 알고리듬
Archives
- Today
- Total
인성 좋은 인성이
Dekker 알고리즘 본문
데커 알고리즘
데커 알고리즘이란?
- 데커 알고리즘은 네덜란드 수학자 Dekker가 상호 베제를 위해서 설계한 상호 베제 알고리즘이다.
데커 알고리즘.
bloolean flag[2];
int turn;
void P0()
{
while (true){
flag[0] = true;
while (flag[1]) {
if (turn == 1) {
flag[0] = false;
while (turn == 1) /* do nothing */;
flag[0] = true;
}
}
/* critical section */;
turn = 1;
flag[0] = false'
/* remainder */
}
}
void P2()
{
while (true){
flag[1] = true;
while (flag[0]) {
if (turn == 0) {
flag[1] = false;
while (turn == 0) /* do nothing */;
flag[1] = true;
}
}
/* critical section */;
turn = 0;
flag[1] = false
/* remainder */
}
}
void main()
{
flag[0] = false;
flag[1] = false;
turn = 1
parbegin (P0, P1);
}
- Dekker의 알고리즘
데커 알고리즘은 우선 3가지의 변수를 가지고 있다. flag와 turn이다. 각 역할은 이렇다.
turn
-> 어느 프로세스가 임계 영역(critical section)에 들어가겠다고 요구할 권한이 있는지 알려주는 변수이다.
flag
-> 임계 영역에 들어가있다고 해 주는 변수이다.