투케이2K

310. (ios/objc) dispatch_semaphore_t 세마포어 사용해 프로그램 순차적 동기 로직 구현 본문

IOS

310. (ios/objc) dispatch_semaphore_t 세마포어 사용해 프로그램 순차적 동기 로직 구현

투케이2K 2022. 11. 21. 08:11

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : Objc

 

[소스 코드]

 

// MARK: - [뷰 로드 실시]
- (void)viewDidLoad {
    [super viewDidLoad];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidLoad() :: 뷰 로드 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    
    // [세마 포어 메소드 호출]
    [self callSemaphore];
    
    
    // [로그 출력 실시]
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidLoad() :: 세마 포어 종료 확인] \n");
    printf("=============================== \n");
    printf("\n");
}





// MARK: - [세마포어 동기화 로직 구현 메소드]
- (void)callSemaphore {
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> callSemaphore() :: 세마포어 동기화 로직 구현 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    // [세마포어 선언 실시]
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    
    
    // [프로그램 로직 구현 실시]
    while (true) {
        
        // 랜덤 정수 값 확인 실시
        int value = arc4random_uniform(5); // [0 ~ 4]
        
        // 카운트 출력
        printf("\n");
        printf("=============================== \n");
        printf("[while :: %d] \n", value);
        printf("=============================== \n");
        printf("\n");
        
        // 스레드 슬립 대기 설정 (1초)
        [NSThread sleepForTimeInterval:1.000];
        
        // 무한 루프 탈출 조건 확인
        if (value > 2){
            
            // 세마포어 대기 종료 알림
            dispatch_semaphore_signal(sema);
            
            // 무한 루프 탈출
            break;
        }
    }
    
    
    // [세마포어 대기 상태 선언]
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}

[결과 출력]


반응형
Comments