Mostly because the underlying OS APIs do not offer such a feature consistently, especially for platforms only supporting semop() (although Linux has semtimedop(), but this is not portable). Similarly, sem_timedwait() is also not available consistently (e.g. on Solaris it isn't available before Solaris 10). If we added this, we'd also need to add at least a feature check macro or function to check whether timed wait is available. Also timedwait should probably fall back to normal wait if timeouts are not supported by the OS.