세마포어(DispatchSemaphore)란 무었인가?

2023. 3. 22. 23:19·앱/Swift

세마포어(DispatchSemaphore)

임계영역에 대하여

임계영역(critical section)이란, 여러프로세스가 동작할때, 각 프로세스가 공유 데이터로 접근하는 프로그램 코드 블록을 의미하며, 이렇게 여러 프로세스가 동시다발적으로 임계영역(즉 공유 메모리) 에 접근하게되면, 데드락이 발생할수도 있는 위험한 값이 오염될수도 있는 영역을 의미한다.

뮤텍스와 세마포어

뮤텍스와 세마포어는 이러한 위의 임계영역에 대한 프로세스 접근 제어 정책을의미한다.

  • 뮤텍스 : 뮤텍스는 공유영역에 단 하나의 프로세스만 접근이 가능하도록 하는 정책이다.
  • 세마포어 : 세마포어는 공유영역에 접근할수 있는 프로세스의 수를 지정해주는 정책이다.

Swift에서의 세마포어

스위프트에서느 dispatchSemaphore이라는 키워드를 통해서 세마포어 정책을 지정해준다. 하지만 스위프트에서는 공유영역에 접근할수 있는 프로세스의 수를 지정한다는 것보다는, 해당 스레드에서 동시에 작업할수 있는 작업의 수를 의미하게 된다.

따라서 세마포어는 공유자원의 갯수를 의미하는 변수 라고 생각하면 이해하기 쉽다.

let semaphore = DispatchSemaphore(value : 2)

위의 코드는 디스패치 세마포어를 사용한 코드인데 뒤의 value가 동시작업가능한 스레드 갯수를 의미한다.

세마포어 메소드

DispatchSemaphore는 두개의 메소드를 내장함수로 가지고 있다.

  1. Signal()세마포어의 수를 +1 한다.
  2. signal() 메소드는 스레드 내부의 작업을 할당이 끝났다는것을 알려준다.
  3. wait()세마포어의 수를 -1 한다.
  4. 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개씩 작업이 할당되었다.

 

 

참고자료

[Operating System] (iOS) 세마포어 (Semaphore), 뮤텍스 (Mutex)

반응형
저작자표시 비영리 변경금지 (새창열림)

'앱 > 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
'앱/Swift' 카테고리의 다른 글
  • SwiftUI) ObservableObject, ObservedObject, SateObject, Published 에 관하여
  • 싱글톤 디자인패턴(Singleton Design), static과 타입프로퍼티(type Property)
  • GCD, Dispatchqueue란?
  • weak , strong, unowned, ARC 는 뭐고 왜 쓰는건가요??
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (202)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (118)
        • Swift 문법 (15)
        • Swift (68)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SwiftUI
    Swift
    composable architecture
    후기
    멋쟁이사자처럼
    ReactorKit
    swift concurrency
    dispatchqueue
    대외활동
    운영체제
    문법
    네트워크
    컴퓨터그래픽스
    위젯킷
    백준
    멋사
    스유
    uikit
    cs
    스위프트
    웹
    알고리즘
    widgetkit
    TCA
    리액트
    c++
    spritekit
    영남대
    Protocol
    widget
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
세마포어(DispatchSemaphore)란 무었인가?
상단으로

티스토리툴바