Найденный в torvalds/linux-2.6.git-> kernel/mutex.c строка 171
Я попытался найти его на Google и таком напрасно.
Что делает for (;;)
сообщить?
Функция for(;;) - это бесконечное условие цикла, похожее на while(1), о котором уже упоминалось большинство. Чаще всего это встречается в кодах мьютексов ядра, или, например, в проблемах с мьютексом, как, например, ужинающие философы. До тех пор, пока переменная мьютекса не будет задана в определенном значении, так что второй процесс получает доступ к ресурсу, второй процесс продолжает петлять, также известную как "занятое ожидание". Доступ к ресурсу может быть дисковым, за что 2 процесса соревнуются в получении доступа с помощью мьютекса так, что за один раз только один процесс имеет доступ к ресурсу.
Это буквально означает "ничего не делать, пока ничего не случится, и на каждом шагу ничего не делать, чтобы подготовиться к следующему". По сути, это бесконечный цикл, который нужно как-то разорвать изнутри, используя утверждение break
, return
или goto
.
Это эквивалентно while( true )
Edit: Так как были некоторые дебаты, вызванные моим ответом (хорошие дебаты, заметьте), следует уточнить, что это не совсем верно для программ на Си, не написанных на С99 и за его пределами, где stdbool.h установил значение true = 1.
Я имею в виду:
#define EVER ;;
for(EVER)
{
// do something
}
Предупреждение: Использование этого в вашем коде крайне нежелательно.
Это то же самое, что написание бесконечного цикла с использованием оператора " for ", но u должен использовать break или другой оператор, который может выйти из этого цикла.
.Это бесконечный цикл, в котором нет начального условия, нет условия приращения и нет конечного условия. Поэтому он будет выполнять итерацию, эквивалентную while(1), навсегда.
Он зацикливается навсегда (до тех пор, пока код внутри цикла не вызовет break
или return
, конечно. , в то время как(1)
является эквивалентным, лично мне кажется более логичным его использовать.