Kode pembelajaran multi-thread yang relatif klasik.
1. Masalah sinkronisasi multi-thread digunakan.
2. Masalah urutan multi-threading digunakan.
Jika Anda tertarik, silakan baca kode di bawah ini dengan cermat. Perhatikan urutan segmen kode dan pikirkanlah. Apakah urutan kode-kode tersebut dapat dipertukarkan? Ini seharusnya bermanfaat untuk pembelajaran. Untuk tujuan demonstrasi, biarkan semua thread tidur sebentar.
menggunakan System.Net;
menggunakan Sistem;
menggunakan Sistem.IO;
menggunakan Sistem.Teks;
menggunakan Sistem.Threading;
menggunakan System.Diagnostics;
namespace Webb.Study
{
kelas TestThread
{
statis Mutex m_Mutex = Mutex baru();
Utas statis[] m_testThreads = Utas baru[10];
statis int m_threadIndex = 0;
kekosongan statis ThreadCallBack()
{
TestThread.m_Mutex.WaitOne();
int m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
Console.WriteLine("Utas {0} mulai.",m_index);
untuk(int i=0;i<=10;i++)
{
TestThread.m_Mutex.WaitOne();
Console.WriteLine("Thread {0}: sedang berjalan. {1}",m_index,i);
TestThread.m_Mutex.ReleaseMutex();
Thread.Tidur(100);
}
Console.WriteLine("Utas {0} akhir.",m_index);
}
public static void Utama(String[] args)
{
Console.WriteLine("Utas utama dimulai.");
for(int i=0;i<TestThread.m_testThreads.Panjang;i++)
{
TestThread.m_threadIndex = saya;
TestThread.m_testThreads[i] = Thread baru(ThreadStart baru(ThreadCallBack));
TestThread.m_testThreads[i].Mulai();
Thread.Tidur(100);
}
for(int i=0;i<TestThread.m_testThreads.Panjang;i++)
{
TestThread.m_testThreads[i].Gabung();
}
Console.WriteLine("Keluar dari thread utama.");
}
}
}
1. Apakah kedua kalimat pada fungsi utama ini dapat dipertukarkan? Mengapa?
TestThread.m_testThreads[i].Mulai();
Thread.Sleep(100);
2. Bisakah kedua kalimat dalam fungsi CallBack ini dipertukarkan? Mengapa? Apa hasil yang berbeda?
TestThread.m_Mutex.ReleaseMutex();
Thread.Sleep(100);
3. Bisakah fungsi utama ditulis seperti ini? Mengapa? Apa hasil yang berbeda?
public static void Utama (String[] args)
{
Console.WriteLine("Utas utama dimulai.");
for(int i=0;i<TestThread.m_testThreads.Panjang;i++)
{
TestThread.m_threadIndex = saya;
TestThread.m_testThreads[i] = Thread baru(ThreadStart baru(ThreadCallBack));
TestThread.m_testThreads[i].Mulai();
TestThread.m_testThreads[i].Gabung();
Thread.Tidur(100);
}
Console.WriteLine("Keluar dari thread utama.");
}
4. Apa fungsi kalimat-kalimat tersebut? Lalu permasalahan apa saja yang masih ada pada program tersebut? Modifikasi apa yang harus dilakukan?
TestThread.m_Mutex.WaitOne();
int m_index = m_threadIndex;
TestThread.m_Mutex.ReleaseMutex();
hanya untuk pembelajaran dan diskusi.