Когда я использую потоки, чтобы напечатать вещи на консоль, почему это дает странные результаты?
В последнее время я увлекаюсь потоками, читая очень хороший PDF-файл Роба Майлза (Вот). У него был пример на странице 160 (2012, C # pdf), но это не так.T записать в консоль только что сделал пустые циклы.
Я написал очень простой цикл создания потоков, который создает 10 потоков, которые записывают свои идентификаторы на экран для каждого числа, кратного 1000. Это было хорошо - это показало мне, как потоки работали вместе. Мои вопросы начинаются с того, почему мой вывод так запутан? Часто, когда я запускаю программу ниже, я получаю несколькоТема 3 Закончена " линии, где яЯ уверен, у меня должен быть только один из них.
Я добавилзамок" из MSDN в цикл, но он все еще производит странный вывод (яприведу пример ниже).
namespace ConsoleApplication1
{
class Program
{
static object sync = new object();
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Thread myThread = new Thread(() => DoThis(i));
myThread.Start();
}
Console.ReadLine();
}
static void DoThis(int s)
{
lock (sync) // a new addition that hasn't helped
{
for (long j = 0; j < 10000; j++)
{
if (j % 1000 == 0) Console.Write(String.Format("{0}.", s));
}
Console.WriteLine("\r\nThread {0} Finished", s);
Debug.Print("\r\nThread {0} Finished", s); //