2015-02-05 2 views
2

Swift의 변경 가능한 배열은 스레드로부터 안전하지 않으므로 쓰기 액세스가 동기화되어야합니다. 또한 모든 읽기가 필요할 수도 있습니까? 변경 가능한 배열 신속한 배열 스레드 안전성

  • 통과 Count 속성 액세스

    1. : 즉, (다른 스레드 배열 돌연변이 될 수 있다는 두 가지 경우에서 가정) 잠금 직렬 대기열 등을 사용하지 않고 안전하게 다음 스레드는 함수에 배열을 지정하거나 변수에 할당합니다. 구조체이므로 배열을 복사합니다.
  • 답변

    2

    스레드 안전성에 대한 자세한 내용은 언어로 지정해야합니다. 현재 Swift에 대한 사양은 없습니다. "실"과 같은 것은 없습니다. 따라서 우리는 "최악의 경우"(예를 들어 C가 어떻게 동작 할 것인가)를 적용하고 GCD의 지식과 Swift에서 사용할 수있는 다른 C API를 적용해야합니다.

    은 언어와 기본 툴셋 자체가이를 처리하기 때문에 스레드로부터 안전합니다. 언어 구조 및 코드를 생성 할 때 현재 하드웨어에 필요할 때 적절한 메모리 장벽 지침에 호출을 삽입합니다. 언어 C (와 C++)는 우리를 대신해서이 점에서 아무런 역할을하지 않습니다.

    우리가 피하려고 노력하는 것은 "데이터 경쟁"입니다. 어떤 스레드가 메모리 위치에 쓰고 다른 스레드가 명시 적 동기화 프리미티브를 사용하지 않고 동일한 위치에서 읽을 때 데이터 경쟁이 발생할 수 있습니다. 그리고 "스레드"는 코코아에서 NSThread 객체를 생성 할 때와 같은 의미라고 생각하십시오.

    따라서 시나리오가 스레드로부터 안전한지 여부는 분명합니다. "아니오, 그렇지 않습니다." 필요한 것은 동시성 제어의 일부 형식입니다 (예 : 배열에 대한 액세스 (읽기 및 쓰기)를 실행하는 전용 직렬 디스패치 대기열을 사용하거나 뮤텍스 (일명 "중요 섹션")와 함께 잠금을 사용합니다.

    +0

    이 답변은 오래된 것 같습니다. –