In addition to Solution 1 and Solution 3.
Of course, you can always change the priority of a thread:
http://msdn.microsoft.com/en-us/library/system.threading.thread.priority.aspx[
^].
You can also change the priority of a process. The thing is:
in almost all cases, you should not do it. You hardly can help anything but you can easily make things bad or very bad.
You are thinking in wrong direction: trying to affect functionality by the timing. You should do directly opposite: the functionality should never depend on time delays in any threads. In fact, there is a direction in testing which does exactly that: seeds different delays in threads in systematic ways and tests that it does not affect functionality. If such tolerance is not achieved, this is considered to be a bug (and a damn bad one), called
race condition.
When I learn it many years ago, I knew it under more defining name: "incorrect dependency on the time of execution". Please see:
http://en.wikipedia.org/wiki/Race_condition[
^].
—SA