In reply to vbabusr:
You are correct in stating that a sequence_item always has exclusive access to the driver. A sequencer can only send one sequence_item to the driver at a time. But you are confusing sequence and sequence*_item* when it comes to sequence to sequencer protocal.
Once lock is granted, no other sequences will be able to access the driver until the sequence issues an unlock() call which will then release the lock.
You can have many sequences running in parallel requesting that sequence_items be sent through the sequencer. Through the sequencer arbitration mechanism, only one sequence will be granted access to send their sequence_item to the driver. During that time, that sequence and its sequence_item have exclusive access to the connected driver.
It’s at the point when that sequence_item is done and it’s time to choose the next sequence_item when lock() and grab() become relevant.