동시성
레이스 컨디션
여러 스레드에서 호출되는 아래 코드는 count가 기대보다 작게 나옵니다. 왜 그런지 CPU 수준에서 설명해 주세요.
final class Stats {
var count = 0
func hit() { count += 1 }
}면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
여러 스레드에서 호출되는 아래 코드는 count가 기대보다 작게 나옵니다. 왜 그런지 CPU 수준에서 설명해 주세요.
final class Stats {
var count = 0
func hit() { count += 1 }
}count += 1은 읽기-증가-쓰기 세 단계라 두 스레드가 겹치면 한쪽 증가가 사라진다. 동기화 없는 동시 쓰기는 Swift에서 정의되지 않은 동작인 데이터 레이스다.
동시성객관식심화
다섯 개의 스레드가 공유 변수 count(초기값 0)에 대해 각각 count += 1을 20번씩, 락 없이 실행합니다. 모두 끝났을 때 count가 가질 수…
#race-condition #data-race #lock
메모리·ARC객관식심화
Objective-C에서 @property (atomic) int a;를 선언하고, 여러 스레드에서 self.a = self.a + 1을 합쳐서 10,000번…
#race-condition #lock #atomic
동시성주관식심화
메시지 목록 화면에서 셀마다 프로필 이미지를 비동기로 내려받아 [String: UIImage] 딕셔너리에 캐시합니다. 여러 스레드가 동시에 읽고 쓰면서 가끔…
#lock #actor
동시성주관식기초
여러 이미지 요청이 같은 메모리 캐시 딕셔너리를 동시에 읽고 씁니다. 가끔 크래시가 나고, 로그를 보면 같은 URL을 두 번 내려받은 흔적도 있습니다. Lock…
#data-race #actor