Я понял, что двойная проверка блокировки имеет недостатки в Java из-за модели памяти, но обычно это связано с одноэлементным шаблоном и оптимизацией его создания.
Как насчет этого случая в target-c:
У меня есть логический флаг, чтобы определить, потоковое ли мое приложение или нет. У меня есть 3 метода, startStreaming, stopStreaming, streamingDataReceived, и я защищаю их от нескольких потоков, используя:
- (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) {
Эта двойная проверка не нужна? У двойной проверки есть подобные проблемы в target-c как в java? Каковы альтернативы этому шаблону (анти-шаблон).
Спасибо