Swift의 변경 가능한 배열은 스레드로부터 안전하지 않으므로 쓰기 액세스가 동기화되어야합니다. 또한 모든 읽기가 필요할 수도 있습니까? 변경 가능한 배열 신속한 배열 스레드 안전성
- : 즉, (다른 스레드 배열 돌연변이 될 수 있다는 두 가지 경우에서 가정) 잠금 직렬 대기열 등을 사용하지 않고 안전하게 다음 스레드는 함수에 배열을 지정하거나 변수에 할당합니다. 구조체이므로 배열을 복사합니다.
Swift의 변경 가능한 배열은 스레드로부터 안전하지 않으므로 쓰기 액세스가 동기화되어야합니다. 또한 모든 읽기가 필요할 수도 있습니까? 변경 가능한 배열 신속한 배열 스레드 안전성
스레드 안전성에 대한 자세한 내용은 언어로 지정해야합니다. 현재 Swift에 대한 사양은 없습니다. "실"과 같은 것은 없습니다. 따라서 우리는 "최악의 경우"(예를 들어 C가 어떻게 동작 할 것인가)를 적용하고 GCD의 지식과 Swift에서 사용할 수있는 다른 C API를 적용해야합니다.
은 언어와 기본 툴셋 자체가이를 처리하기 때문에 스레드로부터 안전합니다. 언어 구조 및 코드를 생성 할 때 현재 하드웨어에 필요할 때 적절한 메모리 장벽 지침에 호출을 삽입합니다. 언어 C (와 C++)는 우리를 대신해서이 점에서 아무런 역할을하지 않습니다.
우리가 피하려고 노력하는 것은 "데이터 경쟁"입니다. 어떤 스레드가 메모리 위치에 쓰고 다른 스레드가 명시 적 동기화 프리미티브를 사용하지 않고 동일한 위치에서 읽을 때 데이터 경쟁이 발생할 수 있습니다. 그리고 "스레드"는 코코아에서 NSThread 객체를 생성 할 때와 같은 의미라고 생각하십시오.
따라서 시나리오가 스레드로부터 안전한지 여부는 분명합니다. "아니오, 그렇지 않습니다." 필요한 것은 동시성 제어의 일부 형식입니다 (예 : 배열에 대한 액세스 (읽기 및 쓰기)를 실행하는 전용 직렬 디스패치 대기열을 사용하거나 뮤텍스 (일명 "중요 섹션")와 함께 잠금을 사용합니다.
이 답변은 오래된 것 같습니다. –