完成此article
class ThreadTest
{
static void Main()
{
Thread t = new Thread (WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 1000; i++) Console.Write ("x");
}
static void WriteY()
{
for (int i = 0; i < 1000; i++) Console.Write ("y");
}
}
产地:
xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...
为什么它不会产生这样的结果?:
xyxyxyxyxyxxyyxyxxxyyxyxyx....
&#34;线程是一个独立的执行路径,能够与其他线程同时运行 。&#34;
上述内容并不完全与我同步。
答案 0 :(得分:4)
两个线程不能并发运行,因为它们除了重复访问同一资源外什么也不做。当一个线程正在运行时,另一个线程几乎肯定在等待控制台而无法运行。使用两个线程进行测试,这些线程除了专门访问相同的不可共享资源外,还可以执行某些操作。
你和我可以同时做差事。但如果你和我需要做的唯一差事需要同一辆车,那么我们最终会轮流。你不会只做一个差事,然后把车带回去,这样我就可以做一个差事。那太荒谬了,我们会把所有的时间都花在车上。你会做一些差事,然后我会做一些。
答案 1 :(得分:3)
取决于 scehduling policy ,每个线程都会被运行一段时间(Thread Quantum)因为你有紧密的循环,分配给每个线程的时间片是足以输出多个打印件,这就是为什么你会看到每个线程的多个打印行为。
答案 2 :(得分:0)
当有人说“线程同时运行”时,他正在抽象出系统是如何工作的,而不是它是如何工作的。
就像听到有人告诉你计算机生成随机数字一样。它并不是真的,但它似乎是,这是一个足够好的工作方式(除非它不是)。
操作系统或运行时环境不断为每个线程分配一段CPU时间来运行。你获得的CPU时间有多大是“已知未知”。
在您的示例中,线程恰好分配了足够的CPU以输出大约16个字符。在稍微不同的情况下运行它可能会得到不同的结果。这就是多线程编程的本质。