  Message passing is a fundamental element in software development, ranging
from concurrent and mobile computing to distributed services, but it suffers
from communication errors such as deadlocks. Session types are a typing
discipline for enforcing safe structured interactions between multiple
participants. However, each typed interaction is restricted to having one fixed
sender and one fixed receiver. In this paper, we extend session types with
existential branching types, to handle a common interaction pattern with
multiple senders and a single receiver in a synchronized setting, i.e. a
receiver is available to receive messages from multiple senders, and which
sender actually participates in the interaction cannot be determined till
execution. We build the type system with existential branching types, which
retain the important properties induced by standard session types: type safety,
progress (i.e. deadlock-freedom), and fidelity. We further provide a novel
communication type system to guarantee progress of dynamically interleaved
multiparty sessions, by abandoning the strong restrictions of existing type
systems. Finally, we encode Rust multi-thread primitives in the extended
session types to show its expressivity, which can be considered as an attempt
to check the deadlock-freedom of Rust multi-thread programs.
