"SImpleMultithreadingApplication":
(рис 3.1)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimpleMultithreadingApplication
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10;i++)
{
Console.WriteLine("Hello World!");
}
Console.ReadLine();
}
}
}
Так как, действие выполняется в один поток (метод Main), результат будет следующим:
(рис 3.2)
System.Threading:
using System.Threading;
static void FirstThread()
{
for (int i=0;i<10;i++)
{
Console.WriteLine("Первый поток говорит: Hello!");
}
}
static void SecondThread()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Второй поток говорит: World!");
}
}
static void ThirdThread()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Третий поток говорит: Hello World!");
}
}
Thread thread1 = new Thread(new ThreadStart(FirstThread)) Thread thread2 = new Thread(new ThreadStart(SecondThread)) Thread thread3 = new Thread(new ThreadStart(ThirdThread))
В нашем случае поток:
thread1 - вызывает метод FirstThread
thread2 - вызывает метод SecondThread
thread3 - вызывает метод ThirdThread Start():
thread1.Start()
thread2.Start()
thread3.Start()
Console.WriteLine("Главный поток молчит")
Console.WriteLine("Завершение главного потока")
Console.ReadLine()
Весь код будет выглядеть следующим образом:
static void Main(string[] args)
{
Thread thread1 = new Thread(new ThreadStart(FirstThread));
Thread thread2 = new Thread(new ThreadStart(SecondThread));
Thread thread3 = new Thread(new ThreadStart(ThirdThread));
thread1.Start();
thread2.Start();
thread3.Start();
Console.WriteLine("Главный поток молчит");
Console.WriteLine("Завершение главного потока");
Console.ReadLine();
}
(рис 3.3)
Как видно из результата, потоки выполняются с различным интервалом по времени.
Sleep(). Для главного потока установим время блокировки 1000мс:
Thread.Sleep(1000)
Console.WriteLine("Главный поток молчит")
Console.WriteLine("Завершение главного потока")
Console.ReadLine()
static void FirstThread()
{
for (int i=0;i<10;i++)
{
Thread.Sleep(20);
Console.WriteLine("Первый поток говорит: Hello!");
}
Console.WriteLine("Завершение первого потока");
}
static void SecondThread()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(100);
Console.WriteLine("Второй поток говорит: World!");
}
Console.WriteLine("Завершение второго потока");
}
static void ThirdThread()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(90);
Console.WriteLine("Третий поток говорит: Hello World!");
}
Console.WriteLine("Завершение третьего потока");
}
(рис 3.4)
Как видно из результата выполнения программы: первый поток завершится первым, т.к время блокировки составляет 20мс. Второй и третий поток будут выполняться почти одновременно, т.к время блокировки составляет 90мс и 100мс. Второй поток и главный поток завершатся почти одновременно т.к общее время блокировки второго и главного потока составляет 1000мс.
Листинг кода программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Concurrent;
namespace ConcurrentCollectionsApplication
{
class Program
{
static BlockingCollection<char> bc;
static void Producer()
{
for (char ch = 'А'; ch <= 'Я'; ch++)
{
bc.Add(ch);
Console.WriteLine("Производится символ " + ch);
}
bc.CompleteAdding();
}
static void Consumer()
{
char ch;
while(!bc.IsCompleted)
{
if(bc.TryTake(out ch))
Console.WriteLine("Потребляется символ "+bc.Take());
}
}
static void Main(string[] args)
{
bc = new BlockingCollection<char>(4);
Task Prod = new Task(Producer);
Task Con = new Task(Consumer);
Con.Start();
Prod.Start();
try
{
Task.WaitAll(Con, Prod);
}
catch (AggregateException exc)
{
Console.WriteLine(exc);
}
finally
{
Con.Dispose();
Prod.Dispose();
bc.Dispose();
}
Console.ReadLine();
}
}
}Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.