Why are process and thread IDs multiples of four?
On Windows NT-based operating systems, process and thread IDs happen always to be a multiple of four. Is this just a coincidence?
Yes, it’s just a coincidence, and you shouldn’t rely on it since it is not part of the programming contract. For example, Windows 95 process and thread IDs were not always multiples of four. (By comparison, the reason that kernel handles are always a multiple of four is part of the specification and will be guaranteed for the foreseeable future.)
Process and thread IDs are multiples of four as a side-effect of code re-use. The same code the allocates kernel handles is also used to allocate process and thread IDs. Since kernel handles are a multiple of four, so too are process and thread IDs. This is an implementation detail, so don’t write code that relies on it. I’m just telling you to satify your curiosity.