GCD 동기 큐 (dispatch_sync)를 사용하여 코드의 중요 섹션을 구현해야한다고 읽었습니다. 예를 들어 계정 잔액에서 거래 금액을 뺀 블록이 있습니다. 동기화 호출의 흥미로운 부분은 질문입니다. 여러 스레드에서 다른 블록의 작업에 어떤 영향을 미칩니 까?동기화 GCD 대기열에 블록을 올려 놓으면 블록이 잠기고 다른 블록이 일시 중지됩니까?
비동기 모드에서 메인 및 사용자 정의 큐의 시스템 정의 블록과 사용자 정의 블록을 모두 사용하고 실행하는 3 개의 스레드가있는 상황을 생각해보십시오. 이 블록들은 모두 어떤 순서로 병렬로 실행됩니다. 이제 블록이 동기화 모드로 사용자 정의 대기열에 저장되면 다른 모든 블록 (다른 스레드 포함)은 블록 실행이 완료 될 때까지 일시 중지됩니까? 그렇지 않으면 다른 블록이 실행되는 동안 일부 블록 만 해당 블록에 놓이게됩니다. 그러나 다른 블록이 동기화 블록과 동일한 데이터를 사용하는 경우 다른 블록이 해당 잠금이 해제 될 때까지 대기해야합니다.
IMHO 상관 없지만 하나 또는 여러 개의 코어가 있으며 동기화 모드는 전체 앱 작업을 중단해야합니다. 그러나 이것들은 제 생각 일 뿐이므로 귀하의 통찰력을 공유하십시오.
"동기 대기열"이 없습니다. 동기 디스패치 (블록 완료를 기다리는)와 비동기 디스패치 (블록을 큐에 추가하는 것)가 있습니다. 동시 및 순차적 대기열이 있습니다. 순차적 큐는 중요한 섹션을 구현하는 데 사용할 수 없지만 중요한 섹션의 필요를 피하기 위해 매우 유용합니다. – gnasher729