2012-07-05 3 views
4

저는 멀티 스레딩 프로그래밍에 익숙하지 않았습니다. & 코코아.Obj-c/Cocoa의 뮤텍스

iVar에 NSMutableArray 액세스/수정하려면 잠금 장치가 필요합니다. 가장 간단한 방법은 무엇입니까?

내가 여기있는 동안 Obj-c/Cocoa를 사용하여 멀티 스레드 프로그래밍에 대해 읽었습니까? Thx.

답변

10

@synchronized 블록 사용 :

@synchronized(MyArray) 
{ 
    // thread safe code 
} 

이 블록 시간에 엑스 코드를 인식하지만, 날 믿어되지 않습니다, 그것은 작동!

자세한 내용은 this 문서를 참조하십시오.

+0

@downvoter explain? –

1

또 다른 방법은 GCD 및 직렬 대기열을 사용하는 것입니다.

NSArray 속성에 대해 비공개 직렬 큐를 사용하는 접근자를 작성하십시오. 배킹 스토어에서 값을 설정하고 가져온다. 직렬 대기열은 FIFO이므로 순차적으로 블록을 실행하므로 스레드 안전 액세스를 속성에 제공합니다.

+0

몇 가지 예를 좀 더 구체적으로 설명해 주시겠습니까? 고마워! –

+1

__block과 같은 것입니다. id val = nil; dispatch_sync (aQueue,^{val = [배열 objectAtIndex : 인덱스];}); 값을 얻고 dispatch_sync (aQueue,^{[배열 addObject : obj];}); 세터에게. –

+0

'dispatch_sync'에주의하십시오! 현재 큐에서 호출되면 교착 상태가 발생합니다. –