--- /dev/null
+// -----------------------------------------------------------------------\r
+// Copyright (c) Microsoft Corporation. All rights reserved.\r
+// -----------------------------------------------------------------------\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading;\r
+\r
+namespace Microsoft.Internal\r
+{\r
+ internal struct WriteLock : IDisposable\r
+ {\r
+ private readonly Lock _lock;\r
+ private int _isDisposed;\r
+\r
+ public WriteLock(Lock @lock)\r
+ {\r
+ this._isDisposed = 0;\r
+ this._lock = @lock;\r
+ this._lock.EnterWriteLock();\r
+ }\r
+\r
+ public void Dispose()\r
+ {\r
+ if (Interlocked.CompareExchange(ref this._isDisposed, 1, 0) == 0)\r
+ {\r
+ this._lock.ExitWriteLock();\r
+ }\r
+ }\r
+ }\r
+}\r