Ваш buffer
, вероятно, не объявлен volatile
.Компилятор может предположить, что никто не изменяет buffer
, и превратить цикл в:
char* res = strchr(buffer, '\n');
while (!res) {}
, что может быть бесконечным циклом.
При использовании NSLog компилятор не может предполагать, что NSLog выигралне связывайтесь с глобальными переменными, поэтому условие не учитывается.
Если вы хотите дождаться готовности другого потока, используйте хотя бы переменную условия ( NSCondition ) вместо бесконечного цикла.Или, может быть, перестроить базу кода для использования GCD .