The easiest way to go about this is to use a flow based queueing mechanism. It can be as simple as enabling WRED, and can be done easily by going into the interface command level and issue the following command:
random-detect.
What this will ensure is that all flows in a common traffic class will be given equal time on the wire.
So in your example, say that one of your users intiate a download. Then the other user comes along and he too intiates a download, or simply starts to browse the internet, both flows will be given equal access. What ends up happening is that the intial flow from the first user, is throttled back by the router by dropping packets. Obvisouly for TCP this is effective. This also works for UDP just in a slightly different manner.
Does this make sense?
Mark