Exec semaphores are signal based. Using signal semaphores is the easiest way to protect shared, single-access resources in the Amiga. Your task will sleep until the semaphore is available for use. The SignalSemaphore structure is as follows: struct SignalSemaphore { struct Node ss_Link; SHORT ss_NestCount; struct MinList ss_WaitQueue; struct SemaphoreRequest ss_MultipleLink; struct Task *ss_Owner; SHORT ss_QueueCount; }; ss_Link is the node structure used to link semaphores together. The ln_Pri and ln_Name fields are used to set the priority of the semaphore in a list and to name the semaphore for public access. If a semaphore is not public the ln_Name and ln_Pri fields may be left NULL. ss_NestCount is the count of number of locks the current owner has on the semaphore. ss_WaitQueue is the List header for the list of other tasks waiting for this semaphore. ss_MultipleLink is the SemaphoreRequest used by ObtainSemaphoreList(). ss_Owner is the pointer to the current owning task. ss_QueueCount is the number of other tasks waiting for the semaphore. A practical application of a SignalSemaphore would be to use it as the base of a shared data structure. For example: struct SharedList { struct SignalSemaphore sl_Semaphore; struct MinList sl_List; }; Creating a SignalSemaphore Structure Making a SignalSemaphore Available to the Public Obtaining a SignalSemaphore Exclusively Obtaining a Shared SignalSemaphore Checking a SignalSemaphore Releasing a SignalSemaphore Removing a SignalSemaphore Structure