Notice
Recent Posts
Recent Comments
Link
투케이2K
45. (Objective-C/objc) dispatch_semaphore_t 세마포어 사용해 프로그램 순차적 동기 로직 구현 실시 본문
Objective-C
45. (Objective-C/objc) dispatch_semaphore_t 세마포어 사용해 프로그램 순차적 동기 로직 구현 실시
투케이2K 2022. 7. 13. 08:25[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : OBJECTIVE-C
[소스 코드]
// 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);
}
[결과 출력]
반응형
'Objective-C' 카테고리의 다른 글
Comments