일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 운영체제
- 인프런
- core data
- 앨런
- 동기화
- 가상 메모리
- 상호배제
- IOS
- forEach
- Linked List
- SwiftUI
- Apple Developer Academy
- 알고리즘
- decode
- deadlock
- Algorithm
- struct
- Codable
- @state
- 데드락
- 동시성
- COLOR
- 프로세스 스케줄링
- Swift
- 파일 시스템
- 100 days of SwiftUI
- async
- UserDefaults
- 비동기
- 오브젝트
- Today
- Total
목록동기화 (4)
기어가더라도 제대로
세마포어는 누구를 깨울지 순서가 부정확하다. 그래서 나온 것이 이벤트 카운트 은행의 번호표와 비슷한 개념 Sequencer 정수형 변수 생성시 0으로 초기화, 감소하지 않음 발생 사건들의 순서 유지 ticket() 연산으로만 접근 가능 ticket(s) 현재까지 ticket() 연산이 호출된 횟수에 하나를 더해서 반환 indivisible operation t
Semaphore 1965년 다익스트라님이 제안 Busy waiting 문제 해결 음이 아닌 정수형 변수(S) 초기화 연산, P(),V()로만 접근 가능 P: Probern(검사) V: Verhogen(증가) 임의의 S 변수 하나에 ready queue 하나가 할당됨 Semaphore의 종류 Binary semaphore S가 0과 1 두종류의 값만 갖는 경우 상호 배제나 프로세스 동기화의 목적으로 사용 Counting Semaphore S가 0 이상의 정수값을 가질 수 있는 경우 Producer-Consumer 문제 등을 해결하기 위해 사용 생산자-소비자 문제 P(S) 연산 물건이 없을 땐 빙빙 s Q로 가서 기다린다. Block된 상태(busy waiting X) V(S) 연산 ..
HW 솔루션도 Busy Waiting 문제가 있다는 것을 알게됨 Spinlock 정수 변수 S = a + 1 위와 같은 연산은 불가 초기화, P(), V() 연산으로만 접근 가능 위 연산들은 indivisible(or atomic) 연산 OS support 보장 전체가 한 Instruction cycle 에 수행 됨 S = 물건의 개수 P() 물건을 꺼내가는 것 자물쇠를 거는것 V() 물건을 집어 넣는 것 자물쇠를 푸는 것 active 라는 변수를 가정해 보겠습니다. 1 물건이 있다. 있어야 다른 프로세스가 실행 가능 0 물건이 없다. P = 잠는 것 - 잠그고 일을하다 끝나면 나올 때 푼다. V = 푸는 것 프로세서가 하나인 경우 Pi 가 active 를 0 으로 만들고 열심히 일..