[QUERY] Help With Semaphore Error on Windows : Cygwin
Yeo Kai Wei
Fri Feb 17 04:56:06 GMT 2023
Thanks for the help.
It works now.
So, the 2 things that were required
1. Adding the '/' in front of the semaphore name so that Cygwin can
#define SemaphoreName "/mysemaphore"
2. Changing the if check from if(semptr == (void*) -1) to if(semptr ==
Thank you very much, Takashi and Corinna.
YEO Kai Wei
On 16/2/2023 10:59 pm, Corinna Vinschen wrote:
> Hi Kai,
> Apart from what Takashi already wrote, there's another bug in this code:
> On Feb 16 12:04, Yeo Kai Wei via Cygwin wrote:
>> #define ByteSize 512
>> #define BackingFile "/shMemEx"
>> #define AccessPerms 0644
>> #define SemaphoreName "mysemaphore"
> What Takashi wrote. The reason that you don't notice that sem_open
> actuially failed is...
>> //Create the semaphore
>> sem_t* semptr = sem_open( SemaphoreName,//name
>> O_CREAT, //create semaphore
>> AccessPerms, //protection permissions
>> 0); //Initial value
>> if(semptr == (void*) -1)
> Why do you test for -1? If you read the POSIX man page for sem_open,
> you'll see this:
> Upon successful completion, the sem_open() function shall return the
> address of the semaphore. Otherwise, it shall return a value of
> SEM_FAILED [...]
> SEM_FAILED is not necessarily -1. On Cygwin it's defined as
> #define SEM_FAILED ((sem_t *) 0)
> in /usr/include/semaphore.h.
> So your code just seems to fail in sem_post, but actually that's
> because sem_open failed and your code checks for the wrong return
More information about the Cygwin