使用非线程安全的CIFilter进行多线程处理

时间:2012-11-30 05:41:31

标签: objective-c ios multithreading exc-bad-access

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实例应该彼此完全隔离。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

仅仅因为每个线程的过滤器是独立的,并不意味着它们访问的资源是每个线程分开的。看起来你需要在使用CoreImage时使用互斥锁或其他类型的锁或同步。