CPU affinity just means that the scheduler *tries* to keep a thread to a certain CPU - if the other CPU has free slots it won't hesitate to take a thread away from the other CPU, though - ie. you can't use this for anything, it's just faster, because the CPU's cache is likely to be trashed less often :)
As I said, several times already now: you can easily implement serializing tokens using mutexes. No performance hit at all, and yet, you can't run into the deadlock problem.
Bye, Waldemar