2012-11-30 35 views
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個線程。我找不出原因,因爲它看起來像線程之間的實例應該完全相互隔離。有任何想法嗎?

+0

僅僅因爲每個線程的過濾器是獨立的,並不意味着他們訪問的資源是分開的每個線程。如果您在使用CoreImage時添加了互斥鎖或其他類型的鎖或同步,問題是否消失? – user1118321

+0

太棒了,這似乎已經解決了問題!謝謝!隨意發佈它作爲答案,我會將其標記爲已接受。 – marcog

+0

我已將其添加爲完整答案。謝謝! – user1118321

回答

1

僅僅因爲每個線程的過濾器是獨立的,並不意味着他們訪問的資源是單獨的每個線程。看起來你需要在你使用CoreImage的時候放置一個互斥或其他類型的鎖或同步。