comparison Implab/Parallels/AsyncQueue.cs @ 137:238e15580926 v2

added the blocking queue
author cin
date Mon, 16 Feb 2015 17:48:39 +0300
parents 671f60cd0250
children 8d5de4eb9c2c
comparison
equal deleted inserted replaced
136:e9e7940c7d98 137:238e15580926
156 156
157 /// <summary> 157 /// <summary>
158 /// Adds the specified value to the queue. 158 /// Adds the specified value to the queue.
159 /// </summary> 159 /// </summary>
160 /// <param name="value">Tha value which will be added to the queue.</param> 160 /// <param name="value">Tha value which will be added to the queue.</param>
161 public void Enqueue(T value) { 161 public virtual void Enqueue(T value) {
162 var last = m_last; 162 var last = m_last;
163 // spin wait to the new chunk 163 // spin wait to the new chunk
164 bool extend = true; 164 bool extend = true;
165 while (last == null || !last.TryEnqueue(value, out extend)) { 165 while (last == null || !last.TryEnqueue(value, out extend)) {
166 // try to extend queue 166 // try to extend queue
182 /// Adds the specified data to the queue. 182 /// Adds the specified data to the queue.
183 /// </summary> 183 /// </summary>
184 /// <param name="data">The buffer which contains the data to be enqueued.</param> 184 /// <param name="data">The buffer which contains the data to be enqueued.</param>
185 /// <param name="offset">The offset of the data in the buffer.</param> 185 /// <param name="offset">The offset of the data in the buffer.</param>
186 /// <param name="length">The size of the data to read from the buffer.</param> 186 /// <param name="length">The size of the data to read from the buffer.</param>
187 public void EnqueueRange(T[] data, int offset, int length) { 187 public virtual void EnqueueRange(T[] data, int offset, int length) {
188 if (data == null) 188 if (data == null)
189 throw new ArgumentNullException("data"); 189 throw new ArgumentNullException("data");
190 if (length == 0) 190 if (length == 0)
191 return; 191 return;
192 if (offset < 0) 192 if (offset < 0)