Sunday, August 12, 2012

C# ம் மல்டிதிரட்டிங்கும்-பகுதி-2


  எல்லா நிரல்களும் ஒரு main thread ஐ கொண்டிருக்கின்றன.இவை நிரல் தொடங்கும் போது தானாகவே இயங்க தொடங்குகின்றன.
C# மற்றும் .Net framework ஆனது process based மற்றும் thread based என இரண்டு வகையான multitasking களை ஆதரிக்கின்றன.
System.Threading என்ற நேம்பேஸில் multi threading க்கிற்கான class கள் உள்ளன. எனவே இந்த நேம்பேஸானது ப்ரொக்ராமில் இம்போர்ட் செய்யப்பட வேண்டும்.
using System.Threading;
திரட் கிளாஸ்:
Thread  கிளாஸ் ஒரு sealed class ஆகும். எனவே இதை inherit செய்ய இயலாது. Thread classல் சில ப்ராப்பர்டிகளும் மற்றும் மெத்தட்களும் வரையறுக்கப்பட்டுள்ளன. இவை thread manage செய்வதற்கு பயன்படுகின்றது.
ஒரு த்ரெட் அனது உருவாக்குவதற்கு Thread class க்கு object create செய்யப்பட வேண்டும். Thread class ன் constructor பின் வருமாரு இருக்கும்.

public Thread(ThreadStart start)

இங்கு start ஆனது த்ரட் எந்த மெத்தட்டை இயக்க வேண்டும் என்பதை குறிகின்றது.
ThreadStart ஆனது ஒரு delegate ஆகும். இது frameworkல் பின் வருமாறு define செய்யப்பட்டுள்ளது.

public delegate void ThreadStart( )

எனவே த்ரட் மெத்தட் ஆனது void இருக்க வேண்டும். மற்றும் எந்த argument ம் ஏறக கூடாது.
த்ரட் ஆனது Thread class ன் start method அழைக்கப்படும் வரை இயக்கப்படாது.


using System;
using System.Threading;
class MyThread {
public int Count;
string thrdName;
public MyThread(string name) {
Count = 0;
thrdName = name;
}
// Entry point of thread.
public void Run() {
Console.WriteLine(thrdName + " starting.");
do {
Thread.Sleep(500);
Console.WriteLine("In " + thrdName +
", Count is " + Count);
Count++;
} while(Count < 10);
Console.WriteLine(thrdName + " terminating.");
}
}
class MultiThread {
static void Main() {
Console.WriteLine("Main thread starting.");
// First, construct a MyThread object.
MyThread mt = new MyThread("Child #1");
// Next, construct a thread from that object.
Thread newThrd = new Thread(mt.Run);
// Finally, start execution of the thread.
newThrd.Start();
do {
Console.Write(".");
Thread.Sleep(100);
} while (mt.Count != 10);
Console.WriteLine("Main thread ending.");
}
}
இங்கு MyThread class ஆனது Run என்கின்ற மெத்தடை கொண்டுள்ளது. இது count என்கின்ற வேரியபிளை 0 to 9 increment செய்கின்றது.
Sleep எங்கின்ற மெத்தட் அழைக்கப்ப்டுவதை கவனிக்கவும். இது Thread classல் டிஃபைன் செய்ய்ப்பட்டுள்ள ஒரு static method ஆகும்.
Sleep method ஆனது த்ரட்டை குறிப்பிட்ட மில்லி செகண்டுகளுக்கு suspend செய்கின்றது.
Main methodக்கு உள்ளே த்ரட் ஆனது பின் வரும் வரிகளால் உருவாக்கப்பட்டு அழைக்கப்படுகிறது.
MyThread mt = new MyThread("Child #1");
// Next, construct a thread from that object.
Thread newThrd = new Thread(mt.Run); 
// Finally, start execution of the thread.
newThrd.Start();

start method ஆனது run method அழைக்கின்றது. Run method suspend செய்யப்படும் போது   main method க்கு திரும்பி அதன் do loopகுள் என்டெர் ஆகின்றது. இரண்டு த்ரடடுகளும் இயங்குகின்றன.


Output:
Main thread starting.
Child #1 starting.
.....In Child #1, Count is 0
.....In Child #1, Count is 1
.....In Child #1, Count is 2
.....In Child #1, Count is 3
.....In Child #1, Count is 4
.....In Child #1, Count is 5
.....In Child #1, Count is 6
.....In Child #1, Count is 7
.....In Child #1, Count is 8
.....In Child #1, Count is 9
Child #1 terminating.
Main thread ending.

ads Udanz

1 comment:

  1. பதிவெழுதுவதை விட்டுவிட்டீர்களோ என அச்சம் கொண்டேன். புத்துயிர் ஊட்டியிருப்பதற்கு மகிழ்ச்சி.

    ReplyDelete