Ho capito che il blocco a doppio controllo è imperfetto in java a causa del modello di memoria, ma di solito è associato al modello singleton e all'ottimizzazione della creazione del singleton.blocco a doppia verifica - obiettivo c
Che dire in questo caso in Objective-C:
Ho un flag booleano per determinare se la mia domanda è in streaming di dati o meno. Ho 3 metodi, startStreaming, stopStreaming, streamingDataReceived e proteggo loro di più thread utilizzando:
- (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) {
È questo il doppio controllo uneccessary? Il doppio controllo ha problemi simili nell'obiettivo-c come in java? Quali sono le alternative a questo modello (anti-pattern).
Grazie
Puoi giustificare questa risposta? –
È possibile estendere la risposta per aggiungere suggerimenti per alternative. Ad esempio, esiste un equivalente a "transiente" o AtomicInteger/etc in Objective-C? –