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個線程。我找不出原因,因爲它看起來像線程之間的實例應該完全相互隔離。有任何想法嗎?
僅僅因爲每個線程的過濾器是獨立的,並不意味着他們訪問的資源是分開的每個線程。如果您在使用CoreImage時添加了互斥鎖或其他類型的鎖或同步,問題是否消失? – user1118321
太棒了,這似乎已經解決了問題!謝謝!隨意發佈它作爲答案,我會將其標記爲已接受。 – marcog
我已將其添加爲完整答案。謝謝! – user1118321