Bahasa C
Sebuah utas didefinisikan sebagai jalur eksekusi suatu program. Setiap utas mendefinisikan aliran kontrol yang unik. Jika aplikasi Anda melibatkan operasi yang rumit dan memakan waktu, maka sering kali membantu untuk menetapkan jalur atau utas eksekusi yang berbeda, dengan setiap utas melakukan tugas tertentu.
Utas adalah proses ringan . Salah satu contoh umum penggunaan thread adalah implementasi pemrograman konkuren oleh sistem operasi modern. Penggunaan utas menghemat pemborosan siklus CPU dan meningkatkan efisiensi aplikasi.
Sejauh ini kami menulis program di mana satu utas berjalan sebagai satu proses yang merupakan contoh aplikasi yang sedang berjalan. Namun, dengan cara ini aplikasi dapat melakukan satu pekerjaan pada satu waktu. Untuk membuatnya menjalankan lebih dari satu tugas pada satu waktu, itu dapat dibagi menjadi utas yang lebih kecil.
Siklus hidup utas dimulai ketika objek dari kelas System.Threading.Thread dibuat dan berakhir ketika utas dihentikan atau menyelesaikan eksekusi.
Berikut ini adalah berbagai status dalam siklus hidup sebuah thread
Keadaan Belum Dimulai Ini adalah situasi ketika instance dari thread dibuat tetapi metode Start tidak dipanggil.
Keadaan Siap Ini adalah situasi ketika utas siap untuk dijalankan dan menunggu siklus CPU.
Negara yang Tidak Dapat Dijalankan Sebuah thread tidak dapat dieksekusi, ketika
Negara Mati Ini adalah situasi ketika utas menyelesaikan eksekusi atau dibatalkan.
Dalam C#, System.Threading.Thread class digunakan untuk bekerja dengan utas. Hal ini memungkinkan membuat dan mengakses utas individu dalam aplikasi multithreaded. Thread pertama yang dieksekusi dalam suatu proses disebut main utas.
Ketika program C# memulai eksekusi, utas utama dibuat secara otomatis. Utas dibuat menggunakan Utas kelas disebut utas anak dari utas utama. Anda dapat mengakses utas menggunakan CurrentThread milik kelas Thread.
Program berikut mendemonstrasikan eksekusi thread utama
Demo Langsungusing System; using System.Threading; namespace MultithreadingApplication { class MainThreadProgram { static void Main(string[] args) { Thread th = Thread.CurrentThread; th.Name = "MainThread"; Console.WriteLine("This is {0}", th.Name); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
This is MainThread
Tabel berikut menunjukkan beberapa properti yang paling umum digunakan dari Utas kelas
No.Sr. | Properti &Deskripsi |
---|---|
1 | Konteks Saat Ini Mendapatkan konteks saat ini di mana utas dijalankan. |
2 | Budaya Saat Ini Mendapatkan atau menyetel budaya untuk utas saat ini. |
3 | Prinsip Saat Ini Mendapatkan atau menetapkan prinsip thread saat ini (untuk keamanan berbasis peran). |
4 | Utas Saat Ini Mendapatkan utas yang sedang berjalan. |
5 | BudayaUIC Saat Ini Mendapatkan atau menyetel budaya saat ini yang digunakan oleh Resource Manager untuk mencari sumber daya khusus budaya saat run-time. |
6 | Konteks Eksekusi Mendapatkan objek ExecutionContext yang berisi informasi tentang berbagai konteks utas saat ini. |
7 | IsAlive Mendapat nilai yang menunjukkan status eksekusi utas saat ini. |
8 | IsBackground Mendapatkan atau menetapkan nilai yang menunjukkan apakah suatu utas adalah utas latar belakang atau bukan. |
9 | IsThreadPoolThread Mendapatkan nilai yang menunjukkan apakah sebuah thread termasuk dalam kumpulan thread yang dikelola atau tidak. |
10 | ManagedThreadId Mendapatkan pengidentifikasi unik untuk utas terkelola saat ini. |
11 | Nama Mendapatkan atau menetapkan nama utas. |
12 | Prioritas Mendapatkan atau menetapkan nilai yang menunjukkan prioritas penjadwalan utas. |
13 | Keadaan Utas Mendapat nilai yang berisi status utas saat ini. |
Tabel berikut menunjukkan beberapa metode yang paling umum digunakan dari Utas kelas
No.Sr. | Metode &Deskripsi |
---|---|
1 | kekosongan publik Abort() Menaikkan ThreadAbortException di utas tempat ia dipanggil, untuk memulai proses penghentian utas. Memanggil metode ini biasanya mengakhiri utas. |
2 | LocalDataStoreSlot statis publik AllocateDataSlot() Mengalokasikan slot data yang tidak disebutkan namanya pada semua utas. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
3 | LocalDataStoreSlot statis publik AllocateNamedDataSlot(nama string) Mengalokasikan slot data bernama pada semua utas. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
4 | kekosongan statis publik BeginCriticalRegion() Memberi tahu host bahwa eksekusi akan memasuki wilayah kode di mana efek pembatalan thread atau pengecualian yang tidak tertangani dapat membahayakan tugas lain dalam domain aplikasi. |
5 | kekosongan statis publik BeginThreadAffinity() Memberi tahu host bahwa kode terkelola akan menjalankan instruksi yang bergantung pada identitas utas sistem operasi fisik saat ini. |
6 | kekosongan statis publik EndCriticalRegion() Memberi tahu host bahwa eksekusi akan memasuki wilayah kode di mana efek dari thread yang dibatalkan atau pengecualian yang tidak tertangani terbatas pada tugas saat ini. |
7 | kekosongan statis publik EndThreadAffinity() Memberi tahu host bahwa kode terkelola telah selesai mengeksekusi instruksi yang bergantung pada identitas utas sistem operasi fisik saat ini. |
8 | kekosongan statis publik FreeNamedDataSlot(nama string) Menghilangkan asosiasi antara nama dan slot, untuk semua utas dalam proses. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
9 | GetData Obyek statis publik (slot LocalDataStoreSlot) Mengambil nilai dari slot yang ditentukan pada utas saat ini, dalam domain utas saat ini. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
10 | AppDomain statis publik GetDomain() Mengembalikan domain saat ini di mana utas saat ini berjalan. |
11 | Publik AppDomain GetDomainID() Mengembalikan pengenal domain aplikasi unik |
12 | LokalDataStoreSlot statis publik GetNamedDataSlot(nama string) Mencari slot data bernama. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
13 | Interupsi kekosongan publik() Menginterupsi utas yang ada dalam status utas WaitSleepJoin. |
14 | public void Join() Memblokir utas panggilan hingga utas berakhir, sambil terus melakukan pemompaan COM dan SendMessage standar. Metode ini memiliki bentuk kelebihan beban yang berbeda. |
15 | public static void MemoryBarrier() Menyinkronkan akses memori sebagai berikut:Prosesor yang mengeksekusi utas saat ini tidak dapat menyusun ulang instruksi sedemikian rupa sehingga akses memori sebelum panggilan ke MemoryBarrier dieksekusi setelah akses memori yang mengikuti panggilan ke MemoryBarrier. |
16 | kekosongan statis publik ResetAbort() Membatalkan permintaan Abort untuk utas saat ini. |
17 | Publik static void SetData(slot LocalDataStoreSlot, Data objek) Menetapkan data di slot yang ditentukan pada utas yang sedang berjalan, untuk domain utas saat ini. Untuk kinerja yang lebih baik, gunakan bidang yang ditandai dengan atribut ThreadStaticAttribute sebagai gantinya. |
18 | kekosongan publik Mulai() Memulai utas. |
19 | public static void Sleep(int millisecondsTimeout) Membuat utas berhenti untuk jangka waktu tertentu. |
20 | public static void SpinWait(int iterasi) Menyebabkan utas menunggu beberapa kali yang ditentukan oleh parameter iterasi |
21 | VolatileRead byte statis publik (alamat byte referensi) VolatileRead ganda statis publik (ref alamat ganda) public static int VolatileRead(ref int address) VolatileRead Obyek statis publik(ref Object address) Membaca nilai bidang. Nilai adalah yang terbaru yang ditulis oleh prosesor mana pun di komputer, terlepas dari jumlah prosesor atau status cache prosesor. Metode ini memiliki bentuk kelebihan beban yang berbeda. Hanya beberapa yang diberikan di atas. |
22 | public static void VolatileWrite(alamat byte referensi, nilai byte) public static void VolatileWrite(ref double address, double value) public static void VolatileWrite(ref int address, int value) public static void VolatileWrite(ref Object address, Object value) Menulis nilai ke bidang segera, sehingga nilai terlihat oleh semua prosesor di komputer. Metode ini memiliki bentuk kelebihan beban yang berbeda. Hanya beberapa yang diberikan di atas. |
23 | hasil bool statis publik() Menyebabkan utas pemanggil menghasilkan eksekusi ke utas lain yang siap dijalankan pada prosesor saat ini. Sistem operasi memilih utas untuk menghasilkan. |
Thread dibuat dengan memperluas kelas Thread. Kelas Thread yang diperluas kemudian memanggil Start() metode untuk memulai eksekusi utas anak.
Program berikut menunjukkan konsep
Demo Langsungusing System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
In Main: Creating the Child thread Child thread starts
Kelas Thread menyediakan berbagai metode untuk mengelola thread.
Contoh berikut menunjukkan penggunaan sleep() metode untuk membuat utas berhenti untuk jangka waktu tertentu.
Demo Langsungusing System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); // the thread is paused for 5000 milliseconds int sleepfor = 5000; Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000); Thread.Sleep(sleepfor); Console.WriteLine("Child thread resumes"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
In Main: Creating the Child thread Child thread starts Child Thread Paused for 5 seconds Child thread resumes
Abort() metode ini digunakan untuk menghancurkan utas.
Runtime membatalkan utas dengan melemparkan ThreadAbortException . Pengecualian ini tidak dapat ditangkap, kontrol dikirim ke akhirnya blokir, jika ada.
Program berikut mengilustrasikan hal ini
Demo Langsungusing System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { try { Console.WriteLine("Child thread starts"); // do some work, like counting to 10 for (int counter = 0; counter <= 10; counter++) { Thread.Sleep(500); Console.WriteLine(counter); } Console.WriteLine("Child Thread Completed"); } catch (ThreadAbortException e) { Console.WriteLine("Thread Abort Exception"); } finally { Console.WriteLine("Couldn't catch the Thread Exception"); } } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); //stop the main thread for some time Thread.Sleep(2000); //now abort the child Console.WriteLine("In Main: Aborting the Child thread"); childThread.Abort(); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
In Main: Creating the Child thread Child thread starts 0 1 2 In Main: Aborting the Child thread Thread Abort Exception Couldn't catch the Thread Exception
Bahasa C
Karena mesin CNC adalah metode manufaktur subtraktif, ada permintaan besar untuk lubang berulir di bagian mesin CNC. Oleh karena itu, penggilingan atau penyadapan ulir harus digunakan untuk memotong lubang berulir di bagian tersebut. Ada beberapa perbedaan yang jelas antara penggilingan benang dan
Ada banyak metode pemrosesan untuk utas. Pemrosesan ulir internal umum dapat disadap dengan ketukan, dan pemrosesan ulir eksternal umum dapat diproses dengan spesifikasi die yang berbeda. Ada banyak keuntungan dari penggilingan benang. Mari kita bicara tentang keuntungan dari penggilingan benang har
Teknologi pelapis sisipan baru yang menampilkan kualitas permukaan sub-mikro bebas cacat cocok untuk jenis beban potong yang dihadapi oleh sisipan selama putaran ulir. Kredit Foto:GenSwiss Sebagai pembaca Production Machining majalah, ada kemungkinan besar Anda telah berinvestasi dalam teknologi b
Siemens Sinumerik 840C/840 Sinumerik 810/820T cycle L97 Thread Cutting Cycle dapat digunakan untukPemotongan thread eksternalThreading internalThreading lancipThread transversal. Pakan pahat otomatis dan secara degresif kuadrat. ini menjaga konstanta penampang potong. Untuk contoh program, baca Co