Add MEF for .NET 4
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / Microsoft / Internal / Lock.Writer.cs
diff --git a/mcs/class/System.ComponentModel.Composition/src/ComponentModel/Microsoft/Internal/Lock.Writer.cs b/mcs/class/System.ComponentModel.Composition/src/ComponentModel/Microsoft/Internal/Lock.Writer.cs
new file mode 100644 (file)
index 0000000..e9d7088
--- /dev/null
@@ -0,0 +1,32 @@
+// -----------------------------------------------------------------------\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