2010-06-07 15 views
5

Çift kontrol gerçekleştirdiği kilitleme nedeniyle bellek modeline Java kusurludur, ama genellikle tekil desen ve tekil oluşturulmasını optimize ile ilişkilidir. çift kontrol kilitleme - objektif C

Ne nesnel-c bu dava kapsamında hakkında:

benim uygulama verilerini akışı olup olmadığını belirlemek için bir boolean bayrak var. Ben 3 yöntemleri, startStreaming, stopStreaming, streamingDataReceived var ve kullanan birden çok iş parçacığı onları korumak:

- (void) streamingDataReceived:(StreamingData *)streamingData { 
    if (self.isStreaming) { 
     @synchronized(self) { 
      if (self.isStreaming) { 

- (void) stopStreaming { 
    if (self.isStreaming) { 
     @synchronized(self) { 
      if (self.isStreaming) { 

- (void) startStreaming:(NSArray *)watchlistInstrumentData { 
    if (!self.isStreaming) { 
     @synchronized(self) { 
      if (!self.isStreaming) { 

bu çifte kontrol uneccessary mı? Çifte kontrolün javadaki gibi objektif-c'de benzer sorunları var mı? Bu desene alternatifler nelerdir (anti-pattern).

Teşekkür

Bu eşit kusurludur

cevap

2

- Bir yarış durumu Bana erken optimizasyon benziyor bayrağı

+0

Bu sorunun cevabını verebilir misiniz? –

+0

Alternatifler için öneriler eklemek için cevabı uzatabilirsiniz. Örneğin, Objective-C'de "geçici" veya "AtomicInteger/etc" ye denk mi var? –

0

kontrol ardından senkronize bölümüne girip zorunda

var. (Örneğin)

- (void) startStreaming:(NSArray *)watchlistInstrumentData { 
     @synchronized(self) { 
      if (!self.isStreaming) { 
... 
+0

Gerekmiyorsa senkronize bloğa girme maliyetinden kaçınıyordum. – bandejapaisa

+0

"Prematüre optimizasyon" ile kastedilen buydu. Bir profiler ile ölçmedikçe ve önemli bir zaman harcayarak senkronize bloğa girme maliyetini neden önemsersiniz? – JeremyP