Lazy Initialization

You could use Lazy<T> class. By default it will support LazyThreadSafetyMode.ExecutionAndPublication.

Or you can do like this:


Snippet from Queue<T>:

object SyncRoot
{
  get
  {
    if (_syncRoot == null)
      Interlocked.CompareExchange<object>(ref _syncRoot, new object(), null);
    return _syncRoot;
  }
}

As Interlocked is a CPU-Level instruction, I think it would be supported by other languages. And this pattern can be used without Lazy<T> class.

Now when two threads first reach line

if (_syncRoot == null)

The first thread calls Interlocked.CompareExchange will assign _syncRoot with new Object(), the latter will do nothing because now _syncRoot would fail to compare with comparand null.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • “心流”是一种专注于事物中的状态,根据释义,它强调高度兴奋和充实感。这是一种学习性质或创造性质的状态。 它也从另一...
    有灵且美阅读 103评论 0 1
  • 张锦教练送给我一瓶燕麦片。她前几天夸我,“哇,真的是人不可貌相……”。 周三新来了一位肚皮舞老师,孙佳琪,极热情,...
    琢磨啥呢阅读 393评论 0 0
  • 越明是江州越家的长公子。 江州越家以药商起家,经营范围遍及南朝各州,甚至连南疆之地都有涉及。 越老爷在世的时候,乐...
    o绾卿o阅读 616评论 9 12
  • 最近因为网易云音乐印红杭州地铁,加之朋友们总是说他的评论功能很强大,所以就也下下来用了下。今天把三个播放器对比听了...
    使徒行者via阅读 1,210评论 0 1
  • 上班茶不断 新购入的川宁红茶差评 网红类泡茶好评
    落日江心屿阅读 158评论 0 1