Found in torvalds/linux-2.6.git -> kernel/mutex.c line 171
I have tried to find it on Google and such to no avail.
What does for (;;)
instruct?
Found in torvalds/linux-2.6.git -> kernel/mutex.c line 171
I have tried to find it on Google and such to no avail.
What does for (;;)
instruct?
The for(;;) is an infinite loop condition, similar to while(1) as most have already mentioned. You would more often see this, in kernel mutex codes, or mutex eg problem such as dining philosophers. Until the mutex variable is set to a particular value, such that a second process gets access to the resource, the second process keeps on looping, also known as busy wait. Access to a resource can be disk access, for which 2 process are competing to gain access using a mutex such that at a time only one process has the access to the resource.
It is functionally equivilent to
while(true) { }
.The reason why the
for(;;)
syntax is sometimes preferred comes from an older age wherefor(;;)
actually compiled to a slightly faster machine code thanwhile(TRUE) {}
. This is becausefor(;;) { foo(); }
will translate in the first pass of the compiler to:whereas the
for(;;)
would compile in the first pass to:i.e.
Hence saving 3 instructions on every pass of the loop.
In practice however, both statements have long since been not only functionally equivalent, but also actually equivalent, since optimisations in the compiler for all builds other than debug builds will ensure that the
mov
,cmp
andjnz
are optimised away in thewhile(1)
case, resulting in optimal code for bothfor(;;)
andwhile(1)
.It's an infinite loop that you'll have to break somehow from within using a break, return or goto statement. or either some interrupt happens otherwise this loop will run infinitely and executes ;(null statement) every time
That was obviously an infinite loop condition.
It loops forever (until the code inside the loop calls
break
orreturn
, of course.while(1)
is equivalent, I personally find it more logical to use that.It is same as writing infinite loop using " for " statement but u have to use break or some other statement that can get out of this loop.