ARM Technical Support Knowledge Articles


Applies to: General Topics



What are semaphores and how would I use them?


There are several types of semaphores (the basic idea behind each type is the same):

Semaphores are typically used in one of two ways:

  1. To control access to a shared device between tasks. A printer is a good example. You don't want 2 tasks sending to the printer at once, so you create a binary semaphore to control printer access. When a device wishes to print, it attempts to "take" the semaphore. If the semaphore is available, the task gets to print. If the semaphore is not available, the task will have to wait for the printer.
  2. Task synchronization. By tasks taking and giving the same semaphore, you can force them to perform operations in a desired order.

Counting semaphores are used when you might have multiple devices (like 3 printers or multiple memory buffers).

Binary semaphores are used to gain exclusive access to a single resource (like the serial port, a non-reentrant library routine, or a hard disk drive). A counting semaphore that has a maximum value of 1 is equivalent to a binary semaphore (because the semaphore's value can only be 0 or 1).

Mutex semaphores are optimized for use in controlling mutually exclusive access to a resource. There are several implementations of this type of semaphore.


Article last edited on: 2007-03-01 02:06:56

Rate this article

Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential