【发布时间】:2017-05-30 16:57:29
【问题描述】:
我现在有点想知道。我刚刚阅读了一些关于线程的信息并在那里登陆:任务与线程的差异 [重复] 在 Jacek 的 stackoverflow 上(抱歉无法创建链接,因为我只能用信誉制作 2 个
MoonKnight 的第一条评论把我带到了那里:albahari.com/threading
我已经获取了代码并对其进行了一些更改,以使其更好地阅读正在发生的事情。这是我修改后的代码:
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 < 10; i++) { System.Threading.Thread.Sleep(1); Console.Write(i); };
Console.ReadLine();
}
static void WriteY()
{
for (int y = 0; y < 10; y++) { System.Threading.Thread.Sleep(1); Console.Write(y); };
Console.ReadLine();
}
我预计会发生的事情(以及大部分时间会发生的事情)是这样的: 好话题:
但这是我想知道的事情(它绝对是随机的并且承诺相同的代码):
奇迹线:
我的问题:
1.线程应该始终同时运行的不同数量的线程不应该它们怎么会发生这种情况?
2.睡眠时间越短,这一切都会变得越疯狂,所以如果你完全移除它,它就会完全随机
【问题讨论】:
-
“线程应该总是同时运行吗?” -- 不。想象一下如何保证两个线程中的两个循环在每一步都同步。这是可能的,但您必须编写大量代码才能实现。您的计算机上正在运行许多许多进程和线程。他们每个人都有一点时间来做他们的事情。线程混乱。如果运行相同代码的两个线程总是碰巧在在用户看来在同一时间做同样的事情,那么圣诞老人级别的奇迹就是。
-
如果您想同步它们,请使用适当的机制
-
@ed 我明白了,感谢您的快速回答
-
@Gonzalo 你能不能给我一个例子我是编码新手不知道适当的机制,但无论如何都会搜索它谢谢你们俩
标签: c# multithreading