Objective c 使用非线程安全CIFilter的多线程处理
声明类不是线程安全的,并且“每个线程必须创建自己的Objective c 使用非线程安全CIFilter的多线程处理,objective-c,ios,multithreading,exc-bad-access,Objective C,Ios,Multithreading,Exc Bad Access,声明类不是线程安全的,并且“每个线程必须创建自己的CIFilter对象”。我正在这样做,但我仍然经常遇到坏访问崩溃。导致崩溃的示例代码: - (CIImage *) outputCIImage { CIFilter *monochromeFilter = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues: kCIInputImageKey, self.inputCIImage, @"inputColor"
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时设置互斥锁或其他类型的锁或同步。仅仅因为过滤器在每个线程中是独立的,这并不意味着它们访问的资源在每个线程中是独立的。如果你在使用CoreImage时使用了互斥锁或其他类型的锁或同步,问题会消失吗?太好了,这似乎解决了问题!谢谢请随意将其作为答案发布,我会将其标记为已接受。我已将其添加为完整答案。谢谢