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     }
投票(ar.IsCompleted) 或者等待句柄(ar.AsyncWaitHandle.WaitOne(50, false)

相关文章:

  • 2021-05-05
  • 2022-12-23
  • 2021-11-08
  • 2021-07-18
  • 2021-05-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-31
  • 2022-12-23
  • 2021-05-08
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案