강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

밀라이님의 프로필 이미지
밀라이

작성한 질문수

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

동시성 프로그래밍 문제점의 해결 (문법 - 182강)

ThreadSafe하지 않을때 해경 방법

작성

·

78

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요

안녕하세요 앨런님 수업을 듣다가 궁금한 점이 생겨서 질문 드립니다!

스크린샷 2025-01-22 오후 8.10.35.png
  • Thread Safe하지 않을 때의 해결 방법이 다시 시리얼큐로 보내는 방법이라고 하셨는데 이때 Task 전체를 다 큐로 보내는 건가요?? 아니면 힙 메모리에 동시에 접근하는 그 일부의 작업만 보내는 건가요?

답변 1

0

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네 미래님.

 

(Task라고 하시면, 혹시나 Swift Concurrency에서 말하는 작업하고 헷갈릴 수 있으니) 정확하게 용어부터 정리하고 말씀드리면.. 쉽게 말하면.. 특정 함수 호출(task)이라고 보시면 됩니다.

 

특정 함수의 호출을 시리얼큐로 다시 보내는 거예요. 왜냐면, 특정 함수 내부에서 데이터(메모리)에 접근할 테니까요..

 

그래서, 코드 예시도 안에 들어있지만.. 아래 코드에서 보시면..

for i in 1...20 {
    DispatchQueue.global().async {
        print("\(i)")
        
        serialQueue.async {        // 올바른 처리 ⭐️
            array.append("\(i)")
        }
    }
}

배열에 append를 하는 함수를 시리얼큐로 보내고 있는 것을 아실 수 있습니다.

 

즉, 아래 부분의... 함수의 호출(작업)을 시리얼큐로 감싸서 보내는 것입니다.

array.append("\(i)")

(시리얼큐로 보내서 처리하려는 작업이 뭘까? 생각해보시면 답이 나오겠죠.)

 

고맙습니다. :)

밀라이님의 프로필 이미지
밀라이

작성한 질문수

질문하기