Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyegerakan Benang C#

Penyegerakan Benang C#

WBOY
WBOYasal
2024-09-03 15:25:55297semak imbas

Teknik sumber yang tersedia untuk hanya satu utas pada satu masa tanpa gangguan mana-mana utas lain sehingga tugas yang diberikan kepada utas semasa selesai dipanggil penyegerakan dalam C#. Sebenarnya, sebarang sumber boleh diakses oleh utas untuk jumlah masa yang diperlukan dalam program multithreading dan sumber itu dikongsi dan dilaksanakan secara tak segerak oleh utas yang merupakan tugas kritikal dan boleh mengakibatkan sistem terhenti dan oleh itu utas mesti dilaksanakan secara serentak dan dengan penyegerakan utas, kami boleh mengekalkan konsistensi utas dan memastikan tiada utas lain mengganggu semasa pelaksanaan satu utas.

Sintaks Penyegerakan Benang C#

Di bawah ialah sintaks Penyegerakan C#Thread adalah seperti berikut:

Thread thread_name = new Thread(method_name);
thread_name.Start();
thread_name.Join();

atau

Thread thread_name = new Thread(method_name);
thread_name.Start();
method_name()
{
lock(this)
{
//thread_name thread is executed
}
}

Di mana thread_name ialah nama thread dan method_name ialah nama kaedah yang diakses oleh thread ini sahaja bermula dari masa thread_name.Start() dipanggil, dan thread_name.Join() menunggu sehingga selesai thread ini oleh menghentikan pelaksanaan semua urutan lain.

Kunci kata kunci dalam kaedah, method_name mengunci pelaksanaan thread supaya tiada thread lain boleh mengakses kaedah sehingga selesai thread semasa.

Fungsi Penyegerakan Benang C#

  • Sebarang sumber boleh diakses oleh utas untuk jumlah masa yang diperlukan dalam program multithreading tetapi jika beberapa utas cuba mengakses sumber yang sama, perkongsian sumber oleh beberapa utas sekaligus atau secara tidak segerak menjadi tugas kritikal dan sistem boleh menghentikan pelaksanaan.
  • Untuk mengatasi masalah ini, penyegerakan benang adalah perlu. Dengan penyegerakan utas, hanya utas tertentu itu boleh mempunyai akses kepada sumber untuk jangka masa tertentu tanpa sebarang gangguan daripada utas lain.
  • Penyegerakan urutan boleh dilakukan menggunakan kata kunci gabungan dan kata kunci kunci.
  • Apabila kata kunci gabungan digunakan pada urutan, urutan dibenarkan untuk menyelesaikan pelaksanaannya tanpa gangguan mana-mana urutan lain.
  • Apabila kata kunci kunci digunakan, sumber yang digunakan untuk urutan dikunci untuk masa sehingga urutan selesai pelaksanaan.

Contoh untuk Melaksanakan Penyegerakan Benang C#

Di bawah ialah contoh Penyegerakan Benang C#:

Contoh #1

Program C# untuk menunjukkan penyegerakan urutan menggunakan kata kunci sertai.

Kod:

using System;
using System.Threading;
//a namespace called program is created
namespace program
{
//a class called check is defined
class check
{
//main method is called
static void Main(string[] args)
{
//an instance of the thread class is created which operates on a method
Thread firstthread = new Thread(secondfunction);
//start method is used to begin the execution of the thread
firstthread.Start();
//join method stops all other threads while the current thread is executing
firstthread.Join();
Thread secondthread = new Thread(firstfunction);
secondthread.Start();
secondthread.Join();
}
private static void firstfunction(object obj)
{
for(inti=1;i<3;i++)
{
Console.WriteLine("First function is executed two times in a row because join method is called on the second thread operating on this method.");
}
}
private static void secondfunction(object obj)
{
for(inti=1;i<3;i++)
{
Console.WriteLine("Second function is executed two times in a row because join method is called on the first thread operating on this method.");
}
}
}
}

Output:

Penyegerakan Benang C#

Penjelasan: Dalam atur cara di atas, ruang nama yang dipanggil atur cara dicipta. Kemudian kelas yang dipanggil cek ditakrifkan di mana kaedah utama dipanggil. Kemudian contoh thread dicipta untuk beroperasi pada kaedah, yang dimulakan menggunakan kaedah Start() dan kaedah join() digunakan pada thread yang sama untuk memastikan pelaksanaannya tidak diganggu oleh thread lain. Oleh itu output dipaparkan dalam satu baris secara serentak. Output program ditunjukkan dalam syot kilat di atas.

Contoh #2

Program C# untuk menunjukkan penyegerakan benang menggunakan kata kunci kunci.

Kod: 

using System;
using System.Threading;
//a class called create is created
class create
{
public void func()
{
//lock is called on this method
lock (this)
{
for (inti = 1; i<= 2; i++)
{
Console.WriteLine("The thread is executing");
}
}
}
}
class check
{
public static void Main(string[] args)
{
//an instance of the create class is created
create c = new create();
//an instance of the thread class is created which operates on the method in another class
Thread firstthread = new Thread(c.func);
firstthread.Start();
Thread secondthread = new Thread(c.func);
secondthread.Start();
}
}

Output:

Penyegerakan Benang C#

Penjelasan: Dalam program di atas, kelas yang dipanggil untuk mencipta dicipta dengan kaedah ditakrifkan yang mana kami telah menggunakan kata kunci kunci yang bermaksud benang yang beroperasi pada kaedah ini mengunci kaedah itu sendiri sehingga ia melengkapkan pelaksanaan tanpa membenarkan utas lain mengakses kaedah tersebut. Dengan cara itu benang dilaksanakan secara serentak. Output program ditunjukkan dalam syot kilat di atas.

Kesimpulan

Dalam tutorial ini, kami memahami konsep ThreadSynchronization dalam C# melalui definisi, sintaks dan kerja Thread synchronization melalui contoh pengaturcaraan dan outputnya.

Artikel Disyorkan

Ini ialah panduan untuk Penyegerakan Benang C#. Di sini kita membincangkan Pengenalan kepada Penyegerakan Benang C# dan cara kerjanya bersama-sama dengan contoh dan Pelaksanaan Kodnya. Anda juga boleh membaca artikel cadangan kami yang lain untuk mengetahui lebih lanjut –

  1. Penjana Nombor Rawak dalam C#
  2. Pembina Statik di Jawa
  3. TextWriter dalam C#
  4. Pembina Statik dalam C#

Atas ialah kandungan terperinci Penyegerakan Benang C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:C# Thread SleepArtikel seterusnya:C# Thread Sleep