docs for 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 :(得分:1)
仅仅因为每个线程的过滤器是独立的,并不意味着它们访问的资源是每个线程分开的。看起来你需要在使用CoreImage时使用互斥锁或其他类型的锁或同步。