Resources may be shared between multiple controllers configured to access
those resources by associating a portion of a semaphore shared memory region with
each different shared resource. Whenever a local write request to the portion of
the semaphore shared memory region is detected by a memory controller, the memory
controller may broadcast the write request to other remote memory controllers.
The memory controller may delay performing a memory access to a local copy of that
portion of the semaphore shared memory region until the other memory controllers
have performed the write access to their copy of the semaphore shared memory region.
The values stored in the semaphore shared memory region indicate which controller
currently has access to the shared resource.