2012-11-30 3 views
0

docs for CIFilter은 클래스가 스레드로부터 안전하지 않으며 "각 스레드는 자체 CIFilter 개체를 만들어야합니다"라고 말합니다. 나는 그 일을하고 있지만 여전히 액세스 빈도가 매우 높습니다. 충돌을 일으키는 예제 코드 :비 스레드 세이프 CIFilter를 사용한 멀티 스레딩

- (CIImage *) outputCIImage { 

    CIFilter *monochromeFilter = 
    [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues: 
    kCIInputImageKey, self.inputCIImage, 
    @"inputColor", [LSMonochromeFilter CIColorForFilterColor:self.color], 
    @"inputIntensity",[NSNumber numberWithFloat:1.0], nil]; 

    return monochromeFilter.outputImage; 
} 

이 코드는 병렬로 최대 10 개의 스레드에서 호출됩니다. 원인 사이에 CIFilter 인스턴스가 완전히 격리되어 있어야하므로 원인을 파악할 수 없습니다. 어떤 아이디어?

+0

필터가 스레드마다 분리되어 있다고해서 그것이 액세스하는 리소스가 스레드마다 분리되어 있다는 것을 의미하지는 않습니다. CoreImage 사용과 관련하여 뮤텍스 또는 다른 유형의 잠금 또는 동기화를 설정하면 문제가 해결됩니까? – user1118321

+0

위대한, 그 문제를 해결 한 것 같습니다! 감사! 대답을 자유롭게 게시하면 받아 들일 수 있습니다. – marcog

+0

전 대답으로 추가했습니다. 감사! – user1118321

답변

1

필터가 스레드마다 개별적으로 존재하기 때문에 액세스하는 리소스가 스레드별로 분리되어있는 것은 아닙니다. CoreImage 사용과 관련하여 뮤텍스 또는 다른 유형의 잠금 또는 동기화를 설정해야하는 것처럼 보입니다.