Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++
- 웹
- 후기
- 운영체제
- 멋쟁이사자처럼
- uikit
- widget
- swift concurrency
- 영남대
- 1일1알골
- 스위프트
- spritekit
- widgetkit
- 문법
- 멋사
- cs
- 네트워크
- Swift
- 스유
- 알고리즘
- dispatchqueue
- SwiftUI
- 백준
- 대외활동
- Protocol
- TCA
- composable architecture
- 리액트
- 위젯킷
- 컴퓨터그래픽스
Archives
- Today
- Total
맛동산이
세마포어(DispatchSemaphore)란 무었인가? 본문
세마포어(DispatchSemaphore)
임계영역에 대하여
임계영역(critical section)이란, 여러프로세스가 동작할때, 각 프로세스가 공유 데이터로 접근하는 프로그램 코드 블록을 의미하며, 이렇게 여러 프로세스가 동시다발적으로 임계영역(즉 공유 메모리) 에 접근하게되면, 데드락이 발생할수도 있는 위험한 값이 오염될수도 있는 영역을 의미한다.
뮤텍스와 세마포어
뮤텍스와 세마포어는 이러한 위의 임계영역에 대한 프로세스 접근 제어 정책을의미한다.
- 뮤텍스 : 뮤텍스는 공유영역에 단 하나의 프로세스만 접근이 가능하도록 하는 정책이다.
- 세마포어 : 세마포어는 공유영역에 접근할수 있는 프로세스의 수를 지정해주는 정책이다.
Swift에서의 세마포어
스위프트에서느 dispatchSemaphore이라는 키워드를 통해서 세마포어 정책을 지정해준다. 하지만 스위프트에서는 공유영역에 접근할수 있는 프로세스의 수를 지정한다는 것보다는, 해당 스레드에서 동시에 작업할수 있는 작업의 수를 의미하게 된다.
따라서 세마포어는 공유자원의 갯수를 의미하는 변수 라고 생각하면 이해하기 쉽다.
let semaphore = DispatchSemaphore(value : 2)
위의 코드는 디스패치 세마포어를 사용한 코드인데 뒤의 value가 동시작업가능한 스레드 갯수를 의미한다.
세마포어 메소드
DispatchSemaphore는 두개의 메소드를 내장함수로 가지고 있다.
- Signal()세마포어의 수를 +1 한다.
- signal() 메소드는 스레드 내부의 작업을 할당이 끝났다는것을 알려준다.
- wait()세마포어의 수를 -1 한다.
- wait() 메소드는 작업을 할당하고, 만약 세마포어의 수가 0이라면, 기다리라는것을 알려준다.
테스트 코드
import Foundation
let semaphore = DispatchSemaphore(value: 2)
for i in 1...10{
semaphore.wait()
DispatchQueue.global().async{
print(1)
sleep(3)
print(2)
sleep(3)
semaphore.signal()
}
}
결과
결과값
2개씩 작업이 할당되었다.
참고자료
반응형
'앱 > Swift' 카테고리의 다른 글
SwiftUI) ObservableObject, ObservedObject, SateObject, Published 에 관하여 (0) | 2023.03.27 |
---|---|
싱글톤 디자인패턴(Singleton Design), static과 타입프로퍼티(type Property) (0) | 2023.03.22 |
GCD, Dispatchqueue란? (0) | 2023.03.22 |
weak , strong, unowned, ARC 는 뭐고 왜 쓰는건가요?? (0) | 2023.03.21 |
Notification Center 이란? Delegate와의 차이점에 대해 (0) | 2023.03.21 |