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 实例应该完全相互隔离。有什么想法吗?
最佳答案
仅仅因为过滤器在每个线程中是独立的,并不意味着它们访问的资源在每个线程中是独立的。看来您需要在使用 CoreImage 时设置互斥锁或其他类型的锁或同步。
关于objective-c - 具有非线程安全 CIFilter 的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639709/