惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
博客园_首页
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
B
Blog
D
DataBreaches.Net
腾讯CDC
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
月光博客
月光博客
V
V2EX
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
博客园 - 叶小钗
Y
Y Combinator Blog

博客园 - 栖息的熊

【转载】安卓巴士Android开发神贴整理 关于Join 异常诡异的mysql连接异常:Fatal error encountered during command execution. 误人子弟的面试题答案 .Net中的安全机制 用定制特性规范构件调用 用重载操作符实现用户数据类型的转换 override和new关键词的差别 你必须知道的值传递和引用传递 windows用户配置文件的复制 求职:本人从事3年工作流引擎开发,熟悉XPDL,.net3.5中WF,Biztalk,开源工作流引擎OBE,期望工作地点上海 对Activity副本的再理解 Windows Workflow Foundation中实现人工活动的demo,按照XPDL规范的实现 WF消息队列的使用 查数据库死锁的实际例子 喜欢使用VMware的.net程序员要注意呀(Visual Studio启动不了的问题) 编译器错误信息: CS1595: 已在多处定义“ ”;一种可能出现的情况 BPM业务场景分析(1)——内部交易合并开票 高级工作流模式深入业务场景分析(1)——多路合并
Mark一些关于线程同步的信息
栖息的熊 · 2012-11-13 · via 博客园 - 栖息的熊

详细参见:http://xxinside.blogbus.com/logs/46441956.html

http://www.cnblogs.com/LoveJenny/tag/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA/

1、Interlocked

提供原子操作,下列方法:Increment, Decrement, Add, CompareExchange, Exchange, MemoryBarrier

//CompareExchange:将target和startVal的值比较,相等则用desiredVal替换,否则不操作,
//不管替换还是不替换返回的都是原来保存在target的值。

Interlocked.CompareExchange(ref target, desiredVal, startVal);

MemoryBarrier参见

http://www.geniusleft.com/notes/post/e585b3e4ba8eSystemThreadingThreadMemoryBarrier().aspx

2、lock,对Monitor的封装

lock(x)
{
  DoSomething();
}

等价于:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
  DoSomething();
}
finally
{
  System.Threading.Monitor.Exit(obj);
}


3、Monitor

基本方法:Enter, TryEnter 可以指定等待进入的超时时间, Exit

更高级的方法:Wait, Pulse, PulseAll。可以跟lock配合使用

4、Mutex

可以理解为提供AppDomain间的同步,当然Monitor/lock的对象继承自MarshalByRefObject,效果一样。更像lock,锁定对象即为自己。开销很大,如果不是AppDomain间同步

,不推荐。

基本方法:WaitOne, ReleaseMutex,等效于Monitor的Enter, Exit,而不是Wait, Pulse,因为WaitOne的时候并不会释放信号量。

很酷的应用方式,可以完全保证应用程序的单例。

5、WaitHandle

EventWaitHandle, AutoResetEvent, ManualResetEvent

基本方法:SingleAndWait, WaitAll, WaitAny, Set. SingleAndWait可以用来在主线程中同步子线程中的开始和完成。

AutoResetEvent是每次Set释放之后自动进入加锁状态(nonsignaled),ManualResetEvent是需要显式调用Reset才能进入加锁状态,否则这个信号量处于有信号状态

(signaled)。
可以用于管理扔进ThreadPool中的线程。构造函数中的bool值表明创建时是Signaled or nonSignaled

6、Semaphore
一个允许多个线程进入的“Mutex”,线程无关,Mutex是线程相关的。Semaphore,Mutex,WaitHandle都可以跨应用程序域