Thanks for the advice. There is one error in the original code frag, though: (taken from the Linux threads man pages) The sem_wait and sem_getvalue functions always return 0. So, the assert() on sem_getvalue() should always have worked, under the linux threads documentation. pthreads-win32, however, seems to return -1 on failure (which is ok for the code frag) if ( result != 0 ) { errno = result; return -1; } However, this indicates that the sem_getvalue() implementation in pthreads-win32, or my compilation, is not quite as it should be. Thanks to J Bossom for his suggestion. The following fragment compiles and runs just fine: #include #include #include using namespace std; int main() { /** * We want to check wether a semaphore can be initialised * with a value. */ // a semaphore sem_t psem; // initialise it with value 10 assert(sem_init(&psem,0,10) == 0); // if the semaphore initialisation was ok, the sem // should now have the value 10 // trying out J Bossom's idea of counting down // using a trywait int cnt=0; while (sem_trywait(&psem)==0) cnt++; cout << "Final value of cnt is " << cnt << endl << flush; return 0; } This indicates that the sem_init() and sem_trywait(), functions are OK.