#ifndef EXEC_SEMAPHORES_H
#define EXEC_SEMAPHORES_H
/*
** $VER: semaphores.h 39.1 (7.2.1992)
** Includes Release 44.1
**
** Definitions for locking functions.
**
** (C) Copyright 1986-1999 Amiga, Inc.
** All Rights Reserved
*/
#ifndef EXEC_NODES_H
#include <exec/nodes.h>
#endif /* EXEC_NODES_H */
#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif /* EXEC_LISTS_H */
#ifndef EXEC_PORTS_H
#include <exec/ports.h>
#endif /* EXEC_PORTS_H */
#ifndef EXEC_TASKS_H
#include <exec/tasks.h>
#endif /* EXEC_TASKS_H */
/****** SignalSemaphore *********************************************/
/* Private structure used by ObtainSemaphore() */
struct SemaphoreRequest
{
struct MinNode sr_Link;
struct Task *sr_Waiter;
};
/* Signal Semaphore data structure */
struct SignalSemaphore
{
struct Node ss_Link;
WORD ss_NestCount;
struct MinList ss_WaitQueue;
struct SemaphoreRequest ss_MultipleLink;
struct Task *ss_Owner;
WORD ss_QueueCount;
};
/****** Semaphore procure message (for use in V39 Procure/Vacate) ****/
struct SemaphoreMessage
{
struct Message ssm_Message;
struct SignalSemaphore *ssm_Semaphore;
};
#define SM_SHARED (1L)
#define SM_EXCLUSIVE (0L)
/****** Semaphore (Old Procure/Vacate type, not reliable) ***********/
struct Semaphore /* Do not use these semaphores! */
{
struct MsgPort sm_MsgPort;
WORD sm_Bids;
};
#define sm_LockMsg mp_SigTask
#endif /* EXEC_SEMAPHORES_H */