sem_getvalue()?
I
don't see that in the standard (POSIX.1b (POSIX 1003.1b-1993))... I assume
this
has
been added to the pthreads-win32 implementation as an extension
(Ross?)
Perhaps there is a bug in that new method.
However, try looping over sem_trywait and count the # of times it returns
0. It should return EAGAIN
when
the semaphore count is zero.
Sorry,
I can't help you with the sem_getvalue....
Note
that since the sem_ calls are from an earlier standard, that when they fail they
are supposed
to
return -1 and set errno to the actual error number....
John.
I'm new to using pthreads-win32 (SNAPSHOT 2002-03-02), and I have to port
a program from Linux to Windows 2000.
A bug has somehow crept into my
code, and I've narrowed the problem area down to
a code fragment similar
to the following:
#include <semaphore.h>
#include
<cassert>
#include <iostream>
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);
// ASSERT NO 1
// if the semaphore initialisation was ok, the
sem
// should now have the value 10
int ret =
0;
assert(sem_getvalue(&psem,&ret) ==
0);
// ASSERT NO 2
// if no errors occured then value is now in
the
// integer ret
cout << endl
<< "sem_getvalue() returns value " << ret << endl <<
flush;
return 0;
}
I'm using MS VC++ 6.0, and I'm
linking with the precompiled pthreadVCE.lib library.
At runtime, the first assert() passes OK, but
second fails.
I have no idea why this fails (hopefully it's
simply a newby error, and not a bug in
the pthreads-win32 lib), but it
does.
Thanks
Rob