1. A method implemented in a first agent of a device, the method comprising: obtaining, via a command queue, multiple commands from a controller, wherein one of the multiple commands is a semaphore check command indicating a desired value for a semaphore; checking, in response to the semaphore check command, a first agent-based semaphore that is updated by a second agent of the device, wherein the first agent-based semaphore comprises a first counter having a first value; determining whether the first value of the first counter of the first agent-based semaphore has been updated to correspond to the desired value; if the first value of the first counter of the first agent-based semaphore has not been updated to correspond to the desired value, then repeatedly checking the first value of the first counter of the first agent-based semaphore until the first value of the first counter of the first agent-based semaphore is updated to correspond to the desired value; and performing, after the first value of the first counter of the first agent-based semaphore has been updated to correspond to the desired value, one or more actions.