C#同步线程类
来源:互联网 发布:第戎高等商学院 知乎 编辑:程序博客网 时间:2024/06/16 22:54
System.Threading命名空间提供了用于同步线程的类,包括Mutex, Monitor, Interlocked, AutoResetEvent, ManualRestEvent,lock关键字
lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区,如果其他线程尝试进入锁定的代码,则它将一直等待,直到该对象被释放。
Monitor
Interlocked
Mutex类强线程标示,互斥体只能由获得它的线程释放,Semaphore类不强制线程标示
如果线程在拥有互斥体时终止,则称此互斥体被放弃,mutex状态设为收到信号,下一个线程获得所有权,在获取被放弃mutex的下一个线程中将引发AbandonedMutexException
AutoResetEvent
WaitOne()阻止当前线程,直到当前WaitHandle收到信号
Reset 将事件状态设置为非终止状态,导致线程阻止
Set 将事件状态设置为终止状态,允许一个或多个等待线程继续
一旦它被终止,AutoResetEvent将立即释放线程并返回到非终止状态
ManualResetEvent
WaitOne()阻止当前线程,直到当前WaitHandle收到信号
Reset 将事件状态设置为非终止状态,导致线程阻止
Set 将事件状态设置为终止状态,允许一个或多个等待线程继续
一旦它被终止,ManualResetEvent将保持终止状态,直到它被手动重置
lock关键字
lock语句通过隐式使用Monitor来提供同步功能,在块开始处调用Monitor.Enter(), 在块结尾处调用Monitor.Exit()lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区,如果其他线程尝试进入锁定的代码,则它将一直等待,直到该对象被释放。
lock(lockObject){ ....}
Monitor
public static void Enter(object) //在指定对象上获取排他锁public static void Exit(object) //释放指定对象的排他锁还有一些重载方法
Interlocked
{ if(0 == Interlocked.Exchange(ref usingResource, 1)) { .... Interlocked.Exchange(ref usingResource, 0); } else { .... } }public static T Exchange(T, T) //通过以原子操作的形式将变量设置为指定值public static T CompareExchange(T, T, T) //比较和交换操作按原子操作执行
Mutex:WaitHandle(Mutex继承自WaitHandle)
{ Mutex mutex = new Mutex(); mutex.WaitOne(); ..... mutex.ReleaseMutex();}
WaitOne()请求互斥体的所属权
ReleaseMutex释放互斥体所属权
Mutex是同步基元,它只向一个线程授予对共享资源的独占访问权,如果一个线程获取了互斥体,则要获取该互斥体的第二个线程被挂起,直到第一个线程释放该互斥体。Mutex类强线程标示,互斥体只能由获得它的线程释放,Semaphore类不强制线程标示
如果线程在拥有互斥体时终止,则称此互斥体被放弃,mutex状态设为收到信号,下一个线程获得所有权,在获取被放弃mutex的下一个线程中将引发AbandonedMutexException
AutoResetEvent
WaitOne()阻止当前线程,直到当前WaitHandle收到信号
Reset 将事件状态设置为非终止状态,导致线程阻止
Set 将事件状态设置为终止状态,允许一个或多个等待线程继续
一旦它被终止,AutoResetEvent将立即释放线程并返回到非终止状态
ManualResetEvent
WaitOne()阻止当前线程,直到当前WaitHandle收到信号
Reset 将事件状态设置为非终止状态,导致线程阻止
Set 将事件状态设置为终止状态,允许一个或多个等待线程继续
一旦它被终止,ManualResetEvent将保持终止状态,直到它被手动重置
阅读全文
0 0
- C# 线程同步 类
- C#同步线程类
- C#线程同步
- C#线程同步模式
- C#基本线程同步
- c# 线程同步
- C#线程同步
- C#线程同步
- c#线程的同步
- C# 线程同步
- C#中的线程同步
- C#的线程同步
- C# 线程同步总结
- c#线程同步
- C#基本线程同步
- C#线程同步
- C# 线程同步示例
- C# 线程同步
- 如何使用Stanford CoreNlp做中文情感分析
- JavaScript的错误与调试
- HDU 4430 Yukari's Birthday
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
- 自定义实现“克隆”
- C#同步线程类
- 定时器 — 延时小菜单
- D
- cmd界面中退出node.js或者npm命令,返会之前的目录
- c语言32个关键字_define
- HDU1262:寻找素数对
- Unix/Linux入门学习170725知识点备忘总结*1
- Retrofit2 完全解析
- springmvc easyUI tree 动态加载数据库实现