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

kimkim333님의 프로필 이미지

작성한 질문수

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

lazy var와 관련된 이슈들

8.LazyVar 코드에서 궁금한 점이 있습니다.

22.06.22 16:48 작성

·

217

1

안녕하세요!

0.GCD - 8.LazyVar 코드 중 2) 시리얼큐+Sync로 해결(Thread-safe처리) 부분을 테스트 하다 궁금한 점이 생겨 글 남깁니다. 

코드를 실행하면 다음과 같은 결과가 나옵니다. 이때, id 2가 1보다 먼저 나오는 경우가 있습니다. 대부분은 제대로 나오나 가끔 이런 식으로 순서가 바뀌어 나옵니다. 

궁금한 점은 for문을 통해 돌렸기 때문에 id 2를 다루는 작업이 id 1을 다루는 작업보다 스레드에 더 늦게 배치될 것이라 예상이 되는데 시리얼 큐를 사용하는데 어떻게 먼저 나올 수 있는 건가요?

 

감사합니다.

 

답변 2

1

kimkim333님의 프로필 이미지
kimkim333
질문자

2022. 06. 27. 11:25

아, 제가 헷갈렸었네요.

답변 감사드립니다. 

1

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

2022. 06. 22. 18:46

kimkim333 님!

 

아, 코드에서 살짝 헷갈리신 것 같은데,

작업을 보내는 큐는 동시로 처리가 되어 있고, 객체의 readVar 계산 속성이 시리얼큐로 처리가 되어 있어서
작업을 보내는 것은 순서가 바뀔 수 있지만, 실제 (객체) 접근시에 시리얼로 처리 되어있어서 lazy var 이슈를 해결할 수 있다는 내용이예요 ^^

그러니 작업의 배치는 동시로 일어나기 때문에 출력의 순서가 바뀔 수 있습니다. ^^


감사합니다. :)