I've found the problem. It looks like the pthreads-win32 coders already know about it, as it is commented in the set_getvalue.c source file: /* Note: * The windows NT documentation says that the increment must be * greater than zero, but it is set to zero here. If this works, * the function will return true. If not, we can't do it this way * so flag it as not implemented. */ It has to do with the differences between the Win98 and Win NT implementation of the function ReleaseSemaphore(). For the record, I ran the same piece of code on 98 and NT platforms, and the sem_getvalue() function does *not* work on NT (*as was suspected). Thanks again everyone Rob