In reply to chr_sue:
The lock() and grab() methods work independently of priorities and arbitration. Think of them as operating on a separate access queue. And it’s not the sequences that you start() that get arbitrated, it’s only the items sent to the sequencer with start_item. So it you have multiple sequences all calling lock/grab in a race, it’s indeterminate which lock/grab executes first. Each subsequent lock() goes to the back of the access queue, and grabs() go to the front of the access queue.