<P> Note that emptyCount may be much lower than the actual number of empty places in the queue, for example in the case where many producers have decremented it but are waiting their turn on useQueue before filling empty places . Note that emptyCount + fullCount ≤ N always holds, with equality if and only if no producers or consumers are executing their critical sections . </P> <P> The canonical names V and P come from the initials of Dutch words . V is generally explained as verhogen ("increase"). Several explanations have been offered for P, including proberen ("to test" or "to try"), passeren ("pass"), and pakken ("grab"). Dijkstra's earliest paper on the subject gives passering ("passing") as the meaning for P, and vrijgave ("release") as the meaning for V. It also mentions that the terminology is taken from that used in railroad signals . Dijkstra subsequently wrote that he intended P to stand for the portmanteau prolaag, short for probeer te verlagen, literally "try to reduce", or to parallel the terms used in the other case, "try to decrease". </P> <P> In ALGOL 68, the Linux kernel, and in some English textbooks, the V and P operations are called, respectively, up and down . In software engineering practice, they are often called signal and wait, release and acquire (which the standard Java library uses), or post and pend . Some texts call them vacate and procure to match the original Dutch initials . </P> <P> A mutex is essentially the same thing as a binary semaphore and sometimes uses the same basic implementation . The differences between them are in how they are used . While a binary semaphore may be used as a mutex, a mutex is a more specific use - case, in that only the thread that locked the mutex is supposed to unlock it . This constraint makes it possible to implement some additional features in mutexes: </P>

The two operations defined by dijkstra to be performed on a semaphore are