Daily iOS
동시성

다중 읽기·단일 쓰기 큐

프로퍼티를 '여러 스레드가 동시에 읽되 쓰기는 한 번에 하나만' 되게 만들려고 합니다. Objective-C 시절엔 getter에서 dispatch_sync, setter에서 dispatch_barrier_async를 쓰는 패턴이 있었는데, 면접관이 묻습니다. "getter가 sync면 동기인데 어떻게 여러 읽기가 동시에 되나요?" 설명해 주세요.

면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

큐가 concurrent이기 때문. sync는 '호출자가 블록 완료를 기다린다'는 뜻이지 큐 안의 다른 블록과 직렬화한다는 뜻이 아니다. 읽기 블록들은 서로 병렬로 돌고, barrier로 넣은 쓰기만 앞 블록이 모두 끝난 뒤 단독 실행된다. barrier는 커스텀 concurrent 큐에서만 유효.

받은 질문 공유