Tight Temporal Bounds for Dataflow Applications Mapped onto Shared Resources