首页 > 其他 > 详细

线程同步

时间:2014-02-15 02:24:23      阅读:456      评论:0      收藏:0      [点我收藏+]
1.    lock 关键字可以用来确保代码块完成运行,提供给 lock 关键字的参数必须为基于引用类型的对象,该对象用来定义锁的范围。Lock关键字是使用Monitor类实现的

    使用 lock 关键字通常比直接使用 Monitor 类更可取,一方面是因为 lock 更简洁,另一方面是因为 lock 确         保了即使受保护的代码引发异常,也可以释放基础监视器。这是通过 finally 关键字来实现的,无论是否引发异常它都执行关联的代码块。

2.    Monitor:lock and SyncLock keywords, monitors prevent blocks of code from simultaneous execution by multiple threads.‘>与 lock 和 SyncLock 关键字类似,监视器防止多个线程同时执行代码块。Enter method allows one and only one thread to proceed into the following statements; all other threads are blocked until the executing thread calls Exit.‘>Enter 方法允许一个且仅一个线程继续执行后面的语句;其他所有线程都将被阻止,直到执行语句的线程调用 Exitlock keyword.‘>这与使用 lock 关键字一样
lock keyword.‘> 
lock keyword.‘>3.    同步事件:具有通知功能
lock keyword.‘>让线程等待非终止的同步事件可以将线程挂起,将事件状态更改为终止可以将线程激活。如果线程尝试等待已经终止的事件,则线程将继续执行,而不会延迟
Set方法: 将时间置于终止状态,激活线程

AutoResetEvent, and ManualResetEvent.‘>同步事件有两种:AutoResetEvent 和 ManualResetEventAutoResetEvent changes from signaled to unsignaled automatically any time it activates a thread.‘>它们之间唯一的不同在于,无论何时,只要 AutoResetEvent 激活线程,它的状态将自动从终止变为非终止。ManualResetEvent allows any number of threads to be activated by its signaled state, and will only revert to an unsignaled state when its Reset method is called.‘>相反,ManualResetEvent 允许它的终止状态激活任意多个线程,只有当它的 Reset 方法被调用时才还原到非终止状态

ManualResetEvent allows any number of threads to be activated by its signaled state, and will only revert to an unsignaled state when its Reset method is called.‘>4.    Mutex对象(互斥量)

与监视器不同的是,命名mutex 可以用来使跨进程的线程同步,且只能有拥有Mutex的线程释放

5.    InterLocked类

为多个线程共享的变量提供原子操作。 

6.    ReaderWriterLock类

定义支持单个写线程和多个读线程的锁。 

7.    Semaphore信号量

使用一个计数器对共享资源进行访问控制,Semaphore构造函数需要提供初始化的计数器(信号量)大小以及最大的计数器大小。

访问共享资源时,程序首先申请一个向Semaphore申请一个许可证,Semaphore的许可证计数器相应的减一,当计数器为0时,其他申请该信号量许可证的线程将被堵赛,直到先前已经申请到许可证的线程释放他占用的许可证让计数器加一,这样最近去申请许可证的线程将会得到竞争得到被释放的许可证。

initialCount is less than maximumCount, and createdNew is true, the effect is the same as if the current thread had called WaitOne (maximumCount minus initialCount) times.‘>初始化信号量大小 与当前线程调用了 WaitOne(maximumCount 减去 initialCount)次相同。

命名信号量系统级有效

线程同步

原文:http://www.cnblogs.com/phenix-yu/p/3549395.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!