2011-07-27 4 views
2

NSBlockOperation을 통해 ObjC 프로그램에서 멀티 스레딩을 구현하고 있습니다. 블록 내에서 호출되는 일부 메소드 호출은 원자 적이어야합니다.메소드를 원자 적으로 표시하는 방법이 있습니까?

@property를 비 원자/원자 만들기와 비슷합니다.

어쨌든 @synthronized을 사용하는 대신 원자로 표시하는 방법이 있습니까?

답변

3

아니요. 어쨌든 차이가 없습니다. @propertyatomic으로 선언하면 액세스 자도 @synthesize 인 경우 원자 접근 자만 생성됩니다. 그렇지 않으면 클라이언트 코드에 원자가 있다는 것을 알리는 것 뿐이며 원자 단위의 접근 자 (@synchronized 또는 다른 잠금 사용)를 작성해야합니다.

원자를 갖는 것으로 메소드를 선언 할 수 있다고하더라도, 당신은 여전히 ​​원자 코드를 직접 작성해야합니다.

3

번호 원자 속성의 표시하는 것은 재산에 대한 액세스를 보장하기 위해 @synchronized의 라인을 따라 뭔가를 사용해야하는 속성에 대한 방출하는 코드가 원자 적 동작 @synthesize 실제로 다만 힌트입니다.

실제로는 합성 게터/설정 기가 실제로 @synchronized을 사용할 필요는 없다는 점에 유의하십시오. 예를 들어, 기본 ivar을 잠금없이 원자 적으로 읽고 쓸 수있는 경우 (예 : 많은 플랫폼에서 일반 int) 컴파일러에서 생성 된 실제 잠금이 없을 수 있습니다. 컴파일러는 @synchronized이 사용하는 잠금 방법이 아닌 다른 잠금 방법을 자유롭게 사용할 수 있습니다.

관련 문제