Относительно классический многопоточный код обучения.
1. Используется задача многопоточной синхронизации.
2. Используется задача последовательности многопоточности.
Если вам интересно, пожалуйста, внимательно прочитайте код ниже. Обратите внимание на порядок сегментов кода и подумайте, можно ли поменять порядок этих кодов? Почему? Это должно быть полезно для обучения. В демонстрационных целях дайте всем потокам некоторое время приостановиться.
использование System.Net;
использование системы;
использование System.IO;
использование System.Text;
использование System.Threading;
пространства имен
System.Diagnostics
Webb.Study;
{
класс TestThread
{
статический мьютекс m_Mutex = новый мьютекс();
статический поток [] m_testThreads = новый поток [10];
статический int m_threadIndex = 0
статический void ThreadCallBack();
{
TestThread.m_Mutex.WaitOne();
интервал m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
Console.WriteLine("Начало потока {0}.",m_index);
for(int i=0;i<=10;i++)
{
TestThread.m_Mutex.WaitOne();
Console.WriteLine("Поток {0}: запущен. {1}",m_index,i);
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
}
Console.WriteLine("Конец потока {0}.",m_index);
}
public static void Main(String[] args)
{
Console.WriteLine("Начало основного потока.");
for(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex = я;
TestThread.m_testThreads[i] = новый поток (новый ThreadStart (ThreadCallBack));
TestThread.m_testThreads[i].Start();
Thread.Sleep(100);
}
for(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_testThreads[i].Join();
}
Console.WriteLine("Выход из основного потока.");
}
}
}
1. Можно ли поменять эти два предложения в основной функции местами? Почему?
TestThread.m_testThreads[i].Start();
Thread.Sleep(100);
2. Можно ли поменять местами эти два предложения в функции CallBack? Почему? Каким будет другой результат?
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
3. Можно ли написать основную функцию так? Почему? Каким будет другой результат?
public static void Main(String[] args)
{
Console.WriteLine("Начало основного потока.");
for(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex = я;
TestThread.m_testThreads[i] = новый поток (новый ThreadStart (ThreadCallBack));
TestThread.m_testThreads[i].Start();
TestThread.m_testThreads[i].Join();
Thread.Sleep(100);
}
Console.WriteLine("Выход из основного потока.");
}
4. Какова функция этих предложений? Так какие же проблемы еще существуют в программе? Какие изменения следует внести?
TestThread.m_Mutex.WaitOne();
интервал m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex()
только для обучения и обсуждения.