--- /dev/null
+<Type Name="CyclicDeque<T>" FullName="Mono.Threading.Tasks.CyclicDeque<T>">
+ <TypeSignature Language="C#" Value="public class CyclicDeque<T> : Mono.Threading.Tasks.IConcurrentDeque<T>" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit CyclicDeque`1<T> extends System.Object implements class Mono.Threading.Tasks.IConcurrentDeque`1<!T>" />
+ <AssemblyInfo>
+ <AssemblyName>Mono.Parallel</AssemblyName>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.Threading.Tasks.IConcurrentDeque<T></InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public CyclicDeque ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetEnumerable">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable<T> GetEnumerable ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerable`1<!T> GetEnumerable() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable<T></ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopBottom">
+ <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopBottom (out T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopBottom(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T&" RefType="out" />
+ </Parameters>
+ <Docs>
+ <param name="obj">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopTop">
+ <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopTop (out T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopTop(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T&" RefType="out" />
+ </Parameters>
+ <Docs>
+ <param name="obj">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PushBottom">
+ <MemberSignature Language="C#" Value="public void PushBottom (T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void PushBottom(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T" />
+ </Parameters>
+ <Docs>
+ <param name="obj">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
--- /dev/null
+<Type Name="IConcurrentDeque<T>" FullName="Mono.Threading.Tasks.IConcurrentDeque<T>">
+ <TypeSignature Language="C#" Value="public interface IConcurrentDeque<T>" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IConcurrentDeque`1<T>" />
+ <AssemblyInfo>
+ <AssemblyName>Mono.Parallel</AssemblyName>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Interfaces />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>Define a common interface for ABP-type deque data structure used in work-stealing algorithm.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="GetEnumerable">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable<T> GetEnumerable ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerable`1<!T> GetEnumerable() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable<T></ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>Returns an <see cref="T:System.Collections.Generic.IEnumerable<T>" /> equivalent of the deque to allow enumeration. </summary>
+ <returns>An <see cref="T:System.Collections.Generic.IEnumerable<T>" /> representation of the elements in the deque (can be the object itself). </returns>
+ <remarks>Implementation can return <see langword="null" /> if the operation is not supported.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopBottom">
+ <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopBottom (out T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopBottom(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T&" RefType="out" />
+ </Parameters>
+ <Docs>
+ <param name="obj">To be added.</param>
+ <summary>Retrieve an element from one end of the deque.</summary>
+ <returns>The result of the operation.</returns>
+ <remarks>The implementation of this method is NOT supposed to be thread-safe.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopTop">
+ <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopTop (out T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopTop(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T&" RefType="out" />
+ </Parameters>
+ <Docs>
+ <param name="obj">The eventually retrieved object.</param>
+ <summary>Retrieve an element from the other end of the deque.</summary>
+ <returns>Result of the operation.</returns>
+ <remarks>The implementation of this method is supposed thread-safe.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PushBottom">
+ <MemberSignature Language="C#" Value="public void PushBottom (T obj);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void PushBottom(!T obj) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="obj" Type="T" />
+ </Parameters>
+ <Docs>
+ <param name="obj">To be added.</param>
+ <summary>Push an element at one end of the deque.</summary>
+ <remarks>The implementation of this method is NOT supposed to be thread-safe.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
--- /dev/null
+<Type Name="PopResult" FullName="Mono.Threading.Tasks.PopResult">
+ <TypeSignature Language="C#" Value="public enum PopResult" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed PopResult extends System.Enum" />
+ <AssemblyInfo>
+ <AssemblyName>Mono.Parallel</AssemblyName>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Abort">
+ <MemberSignature Language="C#" Value="Abort" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Abort = int32(2)" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Empty">
+ <MemberSignature Language="C#" Value="Empty" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Empty = int32(1)" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Succeed">
+ <MemberSignature Language="C#" Value="Succeed" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Succeed = int32(0)" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>4.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
<Parameter Name="taken" Type="System.Boolean&" RefType="ref" />
</Parameters>
<Docs>
- <param name="taken"><para>
+ <param name="taken">
+ <para>
Must be set to false prior calling this method.
</para>
-
-<para>
+ <para>
If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+ </param>
<summary>Attempts to get the lock in Read mode and loops if it's not yet available.</summary>
<remarks>To be added.</remarks>
</Docs>
<Parameter Name="taken" Type="System.Boolean&" RefType="ref" />
</Parameters>
<Docs>
- <param name="taken"><para>
+ <param name="taken">
+ <para>
Must be set to false prior calling this method.
</para>
-
-<para>
+ <para>
If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+ </param>
<summary>Attempts to get the lock in Write mode and loops if it's not yet available.</summary>
<remarks>To be added.</remarks>
</Docs>
<Parameter Name="taken" Type="System.Boolean&" RefType="ref" />
</Parameters>
<Docs>
- <param name="taken"><para>
+ <param name="taken">
+ <para>
Must be set to false prior calling this method.
</para>
-
-<para>
+ <para>
If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+ </param>
<summary>Non-blocking equivalent of <see cref="m:Mono.Threading.EnterReadLock(System.Boolean@)" />.</summary>
<remarks>To be added.</remarks>
</Docs>
<Parameter Name="taken" Type="System.Boolean&" RefType="ref" />
</Parameters>
<Docs>
- <param name="taken"><para>
+ <param name="taken">
+ <para>
Must be set to false prior calling this method.
</para>
-
-<para>
+ <para>
If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+ </param>
<summary>Non-blocking equivalent of <see cref="m:Mono.Threading.EnterWriteLock(System.Boolean@)" />.</summary>
<remarks>To be added.</remarks>
</Docs>
<Type Name="Snzi" Kind="Class" />
<Type Name="SpinLockWrapper" Kind="Class" />
</Namespace>
+ <Namespace Name="Mono.Threading.Tasks">
+ <Type Name="CyclicDeque`1" DisplayName="CyclicDeque<T>" Kind="Class" />
+ <Type Name="IConcurrentDeque`1" DisplayName="IConcurrentDeque<T>" Kind="Interface" />
+ <Type Name="PopResult" Kind="Enumeration" />
+ </Namespace>
</Types>
<Title>Mono.Parallel</Title>
</Overview>
--- /dev/null
+<Namespace Name="Mono.Threading.Tasks">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
Mono.Threading/ReaderWriterLockSlimmer.cs
../corlib/System.Threading/AtomicBoolean.cs
../corlib/System.Collections.Concurrent/ConcurrentOrderedList.cs
+../corlib/System.Threading.Tasks/CyclicDeque.cs
using System.Collections.Generic;
using System.Threading;
+#if INSIDE_MONO_PARALLEL
+namespace Mono.Threading.Tasks
+#else
namespace System.Threading.Tasks
+#endif
{
- internal enum PopResult {
+#if INSIDE_MONO_PARALLEL
+ public
+#endif
+ enum PopResult {
Succeed,
Empty,
Abort
}
- internal interface IDequeOperations<T>
+#if INSIDE_MONO_PARALLEL
+ public
+#endif
+ interface IConcurrentDeque<T>
{
void PushBottom (T obj);
PopResult PopBottom (out T obj);
PopResult PopTop (out T obj);
+ IEnumerable<T> GetEnumerable ();
}
- internal class CyclicDeque<T> : IDequeOperations<T>
+#if INSIDE_MONO_PARALLEL
+ public
+#endif
+ class CyclicDeque<T> : IConcurrentDeque<T>
{
const int BaseSize = 11;
internal class SimpleConcurrentBag<T>
{
- readonly IDequeOperations<T>[] deques;
+ readonly IConcurrentDeque<T>[] deques;
readonly bool unique;
int index = -1;
[ThreadStatic]
static ThreadWorker autoReference;
- readonly IDequeOperations<Task> dDeque;
+ readonly IConcurrentDeque<Task> dDeque;
readonly ThreadWorker[] others;
readonly ManualResetEvent waitHandle;
readonly IProducerConsumerCollection<Task> sharedWorkQueue;