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
1
2022. 06. 22. 18:46
kimkim333 님!
아, 코드에서 살짝 헷갈리신 것 같은데,
작업을 보내는 큐는 동시로 처리가 되어 있고, 객체의 readVar 계산 속성이 시리얼큐로 처리가 되어 있어서
작업을 보내는 것은 순서가 바뀔 수 있지만, 실제 (객체) 접근시에 시리얼로 처리 되어있어서 lazy var 이슈를 해결할 수 있다는 내용이예요 ^^
그러니 작업의 배치는 동시로 일어나기 때문에 출력의 순서가 바뀔 수 있습니다. ^^
감사합니다. :)