2015-01-30 2 views
-6

Я новичок в многопоточности. Я создал поток, который только запускает бесконечный цикл, он выполняет следующие функции:Нить работает бесконечный цикл: это нормальное поведение?

while (1) 
    { 
     __android_log_print(ANDROID_LOG_VERBOSE, "from thread3", "from thread3", 1); 

    } 

То, что я не понимаю, почему мое приложение блокируется (т.е. других потоков спят), когда этот поток создано. Я имею в виду, что поток работает нормально (я вижу сообщения журнала), но похоже, что он предшествует моим двум другим потокам, поэтому они навсегда приостановлены. Разве планировщик не должен заботиться об этом и переключаться между потоками?

Подробнее: эта тема создана на стороне C++, используя std :: threads.

+0

Почему я ниспровергаю? – hahaha1256

+1

Планировщик не волшебник. В вашей узкой петле практически нет возможности для того, чтобы планировщик мог вмешаться и взять управление. И вы, вероятно, занижены, потому что * Этот вопрос не показывает никаких исследований и не является полезным * – rene

+0

@rene на настольных компьютерах планировщик может сделать это просто отлично, используя таймерные прерывания. Если андроид использует совместную многозадачность (что имеет смысл), было бы неплохо найти ссылку, документирующую это. –

ответ

-1

Если вы хотите, чтобы планировщик остановил ваш поток, вы должны периодически отпускать его и периодически приостанавливать. Используйте sleep().

+3

Обратите внимание, что это всегда является почти верным признаком плохого дизайна –

+0

@JanDvorak - это так? Почему ты так говоришь? – vipluv

+2

Вместо этого следует использовать правильную синхронизацию, такую ​​как хороший мьютекс (или даже семафор), очередь событий, очередь производителей/потребителей (или ее специальный случай, ограниченный только одним элементом, называемый m-box в Haskell) ... Единственные случаи, о которых я могу думать, - это _very_ зависящие от времени циклы, в которых вы, _know_, другой поток скоро закончите (то есть, вы _know_ работаете в многоядерной архитектуре, и вы охотно торгуете совместимостью для производительности) , Даже когда вы реализуете упомянутые примитивы синхронизации на уровне os, вы должны знать, что он знает, что ждет –

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