Mercurial > pub > ImplabNet
comparison Implab/Parallels/AsyncQueue.cs @ 227:8d5de4eb9c2c v2
Reimplemented JsonXmlReader, added support for null values: JSON null values are
  mapped to empty nodes with 'xsi:nil' attribute set to 'true'
| author | cin | 
|---|---|
| date | Sat, 09 Sep 2017 03:53:13 +0300 | 
| parents | 238e15580926 | 
| children | d6fe09f5592c | 
   comparison
  equal
  deleted
  inserted
  replaced
| 226:9428ea36838e | 227:8d5de4eb9c2c | 
|---|---|
| 383 return; | 383 return; | 
| 384 | 384 | 
| 385 if (next == null) { | 385 if (next == null) { | 
| 386 | 386 | 
| 387 if (first != Interlocked.CompareExchange(ref m_last, null, first)) { | 387 if (first != Interlocked.CompareExchange(ref m_last, null, first)) { | 
| 388 /*while (first.next == null) | |
| 389 Thread.MemoryBarrier();*/ | |
| 390 | 388 | 
| 391 // race | 389 // race | 
| 392 // someone already updated the tail, restore the pointer to the queue head | 390 // someone already updated the tail, restore the pointer to the queue head | 
| 393 m_first = first; | 391 m_first = first; | 
| 394 } | 392 } | 
| 395 // the tail is updated | 393 // the tail is updated | 
| 396 } | 394 } | 
| 397 | |
| 398 // we need to update the head | |
| 399 //Interlocked.CompareExchange(ref m_first, next, first); | |
| 400 // if the head is already updated then give up | |
| 401 //return; | |
| 402 | |
| 403 } | 395 } | 
| 404 | 396 | 
| 405 public void Clear() { | 397 public void Clear() { | 
| 406 // start the new queue | 398 // start the new queue | 
| 407 var chunk = new Chunk(DEFAULT_CHUNK_SIZE); | 399 var chunk = new Chunk(DEFAULT_CHUNK_SIZE); | 
