////////////////////////////////////////////////////////////////////////////////
//
// 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;
}
}
}