Thread.Sleep(0)

来源:互联网 发布:spark实现knn算法 编辑:程序博客网 时间:2024/06/06 07:46

今天在看 EnterpriseLibrary 源文件时,看到如下的代码,这个代码可以比较经典的解释Thread.Sleep(0)的用途。代码如下:

Hashtable inMemoryCache;CacheItem cacheItemBeforeLock = null;// ..... 一些其他代码
// 通过循环,以获得 cacheItemBeforeLock 的控制权。
bool lockWasSuccessful;do{ lock (inMemoryCache.SyncRoot) { // ..... lockWasSuccessful = Monitor.TryEnter(cacheItemBeforeLock); } if (lockWasSuccessful == false) { Thread.Sleep(0); }} while (lockWasSuccessful == false);try{ // 对 cacheItemBeforeLock 作一些操作 // ..... }finally{ Monitor.Exit(cacheItemBeforeLock);}
 
Thread.Sleep(0); 线程挂起0毫秒。表面看来这个代码是没啥意义的。
其实不然,挂起0毫秒的意义不在于0毫秒,而在于挂起2个字,线程挂起,其他线程就有机会优先执行。
上面的代码中,在Thread.Sleep(0);之前,这个线程跟其他线程争抢cacheItemBeforeLock的情况,就会因为这个挂起而得到解决。
参考:
关于Thread.Sleep(0) 
http://www.cnblogs.com/zzgfly/archive/2007/07/15/818426.html
Thread.Sleep 方法 (Int32)
http://msdn.microsoft.com/zh-cn/library/d00bd51t(VS.80).aspx
 
原创粉丝点击