示例#1
0
ClRcT
cosPosixSemTryLock (ClOsalSemIdT semId)
{
    ClInt32T retCode = CL_OK;
    sem_t *pSem = *(sem_t**)&semId;
 
    CL_FUNC_ENTER();
    retCode = sem_trywait(pSem);
 
    if (-1 == retCode)
    {
      int err = errno;
      if (err == EAGAIN)
          return(CL_OSAL_RC(CL_OSAL_ERR_SEM_LOCK));  /* Taking the lock failed because the lock is taken by someone else */
      else
          sysRetErrChkRet(err);  /* Some unexpected error occurred */
    }
 
    CL_FUNC_EXIT();
    return (CL_OK);  /* It worked, lock was taken */
}
ClRcT
cosSysvSemTryLock (ClOsalSemIdT semId)
{
    ClInt32T retCode = CL_OK;
    struct sembuf semLock[] = {{0, -1, SEM_UNDO | IPC_NOWAIT}};

    CL_FUNC_ENTER();
    retCode = semop ((int)semId, semLock, 1);

    if (-1 == retCode)
    {
        int err = errno;
        if (err == EAGAIN) return(CL_OSAL_RC(CL_OSAL_ERR_SEM_LOCK));  /* Taking the lock failed because the lock is taken by someone else */
        else
        {
            sysRetErrChkRet(err);  /* Some unexpected error occurred */
        }
    }

    CL_FUNC_EXIT();
    return (CL_OK);  /* It worked, lock was taken */
}