singrdk/base/Libraries/Singularity.V1/Threads/SyncHandle.cs

103 lines
3.2 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity - Singularity ABI
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: SyncHandle.cs
//
// Note:
//
using System;
using System.Runtime.CompilerServices;
using System.Threading;
namespace Microsoft.Singularity.V1.Threads
{
public struct SyncHandle // : public WaitHandle
{
public readonly UIntPtr id; // could be moved to WaitHandle
[Inline]
[NoHeapAllocation]
private SyncHandle(UIntPtr id)
{
this.id = id;
}
[Inline]
[NoHeapAllocation]
public static implicit operator SyncHandle(MutexHandle handle)
{
return new SyncHandle(handle.id);
}
[Inline]
[NoHeapAllocation]
public static implicit operator SyncHandle(AutoResetEventHandle handle)
{
return new SyncHandle(handle.id);
}
[Inline]
[NoHeapAllocation]
public static implicit operator SyncHandle(ManualResetEventHandle handle)
{
return new SyncHandle(handle.id);
}
//////////////////////////////////////////////////////////////////////
//
// The following methods could be moved to WaitHandle if we had
// struct inheritance.
//
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern bool WaitOne(SyncHandle handle);
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern bool WaitOne(SyncHandle handle,
TimeSpan timeout);
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern bool WaitOne(SyncHandle handle,
SchedulerTime stop);
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern bool WaitOneNoGC(SyncHandle handle);
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern unsafe int WaitAny(SyncHandle * handles,
int handleCount);
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern unsafe int WaitAny(SyncHandle * handles,
int handleCount,
TimeSpan timeout);
[OutsideGCDomain]
[NoHeapAllocation]
[StackBound(1152)]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern unsafe int WaitAny(SyncHandle * handles,
int handleCount,
SchedulerTime stop);
}
}