New tests.
[mono.git] / mcs / class / System.Web.Mvc2 / System.Web.Mvc / Async / SingleEntryGate.cs
1 /* ****************************************************************************\r
2  *\r
3  * Copyright (c) Microsoft Corporation. All rights reserved.\r
4  *\r
5  * This software is subject to the Microsoft Public License (Ms-PL). \r
6  * A copy of the license can be found in the license.htm file included \r
7  * in this distribution.\r
8  *\r
9  * You must not remove this notice, or any other, from this software.\r
10  *\r
11  * ***************************************************************************/\r
12 \r
13 namespace System.Web.Mvc.Async {\r
14     using System;\r
15     using System.Threading;\r
16 \r
17     // used to synchronize access to a single-use consumable resource\r
18     internal sealed class SingleEntryGate {\r
19 \r
20         private const int NOT_ENTERED = 0;\r
21         private const int ENTERED = 1;\r
22 \r
23         private int _status;\r
24 \r
25         // returns true if this is the first call to TryEnter(), false otherwise\r
26         public bool TryEnter() {\r
27             int oldStatus = Interlocked.Exchange(ref _status, ENTERED);\r
28             return (oldStatus == NOT_ENTERED);\r
29         }\r
30 \r
31     }\r
32 }\r