Guardian Programmer's Guide

Table Of Contents
Synchronizing Processes
Guardian Programmer’s Guide 421922-014
26 - 13
BINSEM_GETSTATS_ and
BINSEM_STAT_VERSION_ Example
{
/* Create a BinSem */
err = BINSEM_CREATE_(&semID, 2);
if(err !=BINSEM_RET_OK) {
printf("BINSEM_CREATE_ failed with status %d\n", err);
return(-1);
}
/* Unlock BinSem Created */
err = BINSEM_UNLOCK_(semID);
if (err)
printf("BINSEM_UNLOCK_ failed with %d\n", err);
/* A real program would have application logic,
including locking and unlocking one or more binary
semaphores.
It might also create or open additional semaphores.
...
*/
err = PROCESSHANDLE_GETMINE_((short*)&pHandle);
if(err)
printf("PROCESSHANDLE_GETMINE_ failed with error:%d\n",
err);
/* Verify BinSem Stats Version */
ret = BINSEM_STAT_VERSION_(BINSEM_STAT_VERSION1);
if(ret < sizeof(binSemStats_t))
printf("BINSEM_STAT_VERSION_ failed with error:%d\n",
ret);
/* Print BinSem Stats */
puts("Sem ID Acquisitions Tot. Cont. Mult. Cont. "
"Cur. Cont. Max. Cont");
semID = BINSEM_STAT_INIT_CONTEXT;
for (;;)
{
/* Get BinSem Stats */
err = BINSEM_GETSTATS_(&pHandle, semID,
BINSEM_STAT_OPT_DEFAULT,
&stat, sizeof stat);
if (err != BINSEM_RET_OK)
break;
printf("%6d %17u %13u %13u %11u %10u\n",
stat.semID, stat.acquisitions,
stat.contentions,
stat.multiCont, stat.contenders,
stat.maxContend);
semID = stat.semID;
};
if(err != BINSEM_RET_EOF)
printf("BINSEM_GETSTATS_ failed with error %d\n", err);
if (err = BINSEM_CLOSE_(semID))
printf("BINSEM_CLOSE_ failed with %8.8x\n", err);