How do I do queue ownership transfer of a resource only READ by multiple queues from different queue families?

If a resource is Read by some passes distributed to multiple queues with different queue family indices, how do I do queue ownership transfer between these queues? After all, those passes distributed to multiple queues execute in parallel, and if I assume some execution order between them, it would hurt parallelism (for example: passA in queue0 is Ready to execute. However, because I assume passB in queue1 execute first when compiling rendergraph(if don’t assume execution order, it’s impossible to do resources’ queue ownership transfer which need both source family index and target family index), in that case, even though passA is ready, it has to wait ultil passB release resource’s queue ownership, and passB might start executing very late).

If multiple queues reading the same resource is important, why is that resource exclusively owned by queues at all? Just make it a shared resource.

Cause I’m just using this blog post as a reference to implement render graph:
And I haven’t found any other better tutorial of how to implement render graph.