1,线程概述
线程是程序汇中独立的指令流。线程有一个优先级,实际上正在处理的程序的位置计数器,一个存储其局部变量的栈。每个线程都有自己的栈。但应用程序的内存和堆由一个进程的所有线程共享。
进程包含资源,如windows句柄,文件句柄或其他内核对象。每个进程都分配了虚拟内存。一个进程至少包含一个线程。操作系统会调度线程。
总结:
同步代码区域(代码块):lock, Monitor, SpinLock, Mutex,WaitHandle,Semaphore,EventWaitHandle,AutoRestEvent/ManualResetEvent.
Barrier, ReadWriterLock(Slim)
多线程变量同步:InterLocked,
进程间同步:
Mutex, Semaphore,
2,异步委托:
创建线程的一种简单方式是定义一个委托,并异步调用它。委托时方法类型安全的引用。Delegate类还支持异步调用委托,在后头创建一个执行任务的线程。
委托使用线程池来完成异步调用。
public delegate int TakesAWhileDelegate(int data, int ms);
2.1投票:
IAsyncResult ar=al.BeginInvoke(1,3000, null, null);
int result=dl.EndInvoke(ar);
2.2 等待句柄 (WaitHandle)
1 class Program 2 { 3 public delegate int TakesAWhileDelegate(int data, int ms); 4 static int TakesAWhile(int data, int ms) 5 { 6 Console.WriteLine("TakesAWhile started"); 7 Thread.Sleep(ms); 8 Console.WriteLine("TakesAWhile completed"); 9 return ++data; 10 } 11 private static void Main(string[] args) 12 { 13 Console.WriteLine("Main Begin."); 14 TakesAWhileDelegate dl = TakesAWhile; 15 IAsyncResult ar = dl.BeginInvoke(2, 3000, null, null); 16 17 //ar.IsCompleted 18 //ar.AsyncWaitHandle.WaitOne(50) 19 20 dl.EndInvoke(ar); 21 Console.WriteLine("Main() end."); 22 Console.ReadLine(); 23 } 24 }