//////////////////////////////////////////////////////////////////////////////// // // Microsoft Research Singularity // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: Thread.cs // // Note: // using System; using System.Runtime.CompilerServices; using Microsoft.Singularity; using Microsoft.Singularity.Io; using Microsoft.Singularity.Scheduling; namespace System.Threading { /// /// /// Event class implementing an event with manual reset symantics such event has to /// be manually set to unsignaled state /// /// [NoCCtor] [CLSCompliant(false)] public sealed class ManualResetEvent : WaitHandle { /// /// /// Constructor /// /// /// Initial state of an event true indciates that event is signaled /// public ManualResetEvent(bool initialState) : base(initialState ? WaitHandle.SignalState.Signaled : WaitHandle.SignalState.Unsignaled, WaitHandle.SignalState.Signaled, SpinLock.Types.ManualResetEvent) { } /// /// /// Reset an event state to non signaled /// /// [NoHeapAllocation] public bool Reset() { // Make sure that we don't have any waiters and then change event state to unsignaled // in all cases SignalAll (WaitHandle.SignalState.Unsignaled, WaitHandle.SignalState.Unsignaled); return true; } /// /// /// Wake up all waiters and leave state signaled, if no waiters present set event into signaled state /// /// [NoHeapAllocation] public bool Set() { SignalAll (WaitHandle.SignalState.Signaled,WaitHandle.SignalState.Signaled); return true; } } }