Un code d’apprentissage multithread relativement classique.
1. Un problème de synchronisation multithread est utilisé.
2. Le problème de séquence du multi-threading est utilisé.
Si vous êtes intéressé, veuillez lire attentivement le code ci-dessous. Faites attention à l'ordre des segments de code et réfléchissez-y. L'ordre de ces codes peut-il être interchangé ? Pourquoi ? Cela devrait être utile pour l’apprentissage. À des fins de démonstration, laissez tous les threads dormir pendant un moment.
en utilisant System.Net ;
utiliser le système ;
en utilisant System.IO ;
en utilisant System.Text ;
en utilisant System.Threading ;
en utilisant System.Diagnostics ;
espace de noms Webb.Study ;
{
classe TestThread
{
Mutex statique m_Mutex = new Mutex();
Thread statique[] m_testThreads = new Thread[10];
static int m_threadIndex = 0;
static void ThreadCallBack()
{
TestThread.m_Mutex.WaitOne();
int m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
Console.WriteLine("Début du fil de discussion {0}.",m_index);
pour(int i=0;i<=10;i++)
{
TestThread.m_Mutex.WaitOne();
Console.WriteLine("Thread {0} : est en cours d'exécution. {1}",m_index,i);
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
}
Console.WriteLine("Fin du fil {0}.",m_index);
}
public static void Main(String[] arguments)
{
Console.WriteLine("Démarrage du thread principal.");
pour(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex = je;
TestThread.m_testThreads[i] = nouveau Thread(nouveau ThreadStart(ThreadCallBack));
TestThread.m_testThreads[i].Start();
Thread.Sleep(100);
}
pour(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_testThreads[i].Join();
}
Console.WriteLine("Sortie du thread principal.");
}
}
}
1. Ces deux phrases de la fonction principale peuvent-elles être interchangées ? Pourquoi?
TestThread.m_testThreads[i].Start();
Thread.Sleep(100);
2. Ces deux phrases de la fonction CallBack peuvent-elles être interchangées ? Pourquoi? Quel serait le résultat différent ?
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
3. La fonction principale peut-elle être écrite comme ceci ? Pourquoi? Quel serait le résultat différent ?
public static void Main (String[] arguments)
{
Console.WriteLine("Démarrage du thread principal.");
pour(int i=0;i<TestThread.m_testThreads.Length;i++)
{
TestThread.m_threadIndex = je;
TestThread.m_testThreads[i] = nouveau Thread(nouveau ThreadStart(ThreadCallBack));
TestThread.m_testThreads[i].Start();
TestThread.m_testThreads[i].Join();
Thread.Sleep(100);
}
Console.WriteLine("Sortie du thread principal.");
}
4. Quelle est la fonction de ces phrases ? Alors, quels types de problèmes subsistent encore dans le programme ? Quelles modifications faut-il apporter ?
TestThread.m_Mutex.WaitOne();
int m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
uniquement pour l'apprentissage et la discussion.