2012-03-21 2 views
0

У меня есть приватный переменный в моем классе:Как синхронизировать два потока с переменной BOOL?

BOOL isEnabled; 

и метод:

-(void) foo { 

    if(isEnabled) { 
    // do some operations 
    } 
    else { 
    // wait till other thread makes isEnabled = TRUE and do operations 

    } 
} 

Мне нужно synchnize метод как-то. После того, как isEnabled станет правдой, я могу выполнять свои операции.

ответ

2

Ваш вопрос довольно общий, и его трудно ответить без какого-либо минимального примера.

Если вы хотите синхронизировать выполнение различных потоков, я предлагаю вам прочитать около NSOperation и NSOperationQueue. NSOperationQueue s справится с синхронизацией бесплатно.

Проще говоря, операция NSOperation - это операция, выполняемая в фоновом режиме. Каждая операция выполняется в очереди (NSOperationQueue).

В поле NSOperationQueue вы можете указать количество одновременных операций, которые вы можете выполнять в фоновом режиме.

[yourQueue setMaxConcurrentOperationCount:1]; 

Например, приведенный выше код установить операции, которые могут быть выполнены в 1. Для общих ресурсов, это то же самое, чтобы синхронизировать доступ к этому ресурсу среди различных операций.

Кроме того, вы можете установить зависимости между операциями.

[operation2 addDependency:operation1]; 

код означает, что operation1должен закончить до operation2 может работать.

Для получения дополнительной информации я предлагаю следующий учебник по nsoperation-and-nsoperationqueue. Конечно, вы также можете увидеть ссылки на классы в документе Apple.

Надеюсь, это поможет.

+0

Действительно спасибо за разъяснение – Buron

Смежные вопросы