The philosophy department of Columbia has, in their wisdom, waitlisted me. (I knew it was a bad idea to use an essay that criticized one of their emeritus faculty as my writing sample.) Apparently the logistics of waitlisting and acceptance are as follows: since all philosophy departments require notice as of April 15th as to whether or not one will be attending in the following fall, on the morning of the 15th the departments get in touch with those from whom they have not yet heard and demand said intelligence. Thus armed they contact those on their waitlist (who have, presumably, been fending off calls from the schools that have accepted them) and tell them if they've been accepted and on what terms, &c., these then deciding what they will do in the span of a few hours and then calling back.
This scheme, while clunky, seems as if it probably works pretty well, but what about the case of cyclic acceptances and waitlistings, as in the following?
A is accepted by X and waitlisted at Y, the first choice.
The same relationship holds for B, Y and Z, and C, Z, and X
Comes the morning of the 15th, and X calls A and wants to know, are you coming? A says, "I'm waiting to hear from Y". But A will never hear from Y, because Y needs to know the disposition of B, who's waiting to hear from Z, which needs to know what's the story with C, who still carries a torch for X, which is waiting on A.
Of course, if they were all aware of the total acceptance situation, the problem would be easily soluble. But they aren't.
I bet this kind of problem comes up in poorly-designed multithreaded or parallel processing programs pretty frequently.
[Post title shamelessly taken from a conversation with <a href="http://www.adamkotsko.com">Kotsko</a>.]