       OSAtomicIncrement32Barrier(&self.waiting)
 
     dispatch_sync(queue) {
+
       OSAtomicDecrement32Barrier(&self.waiting)
       task()
     }


  private var waiting: Int32 = 0

  init(name: String)
  {
    queue = dispatch_queue_create(name+String(arc4random()), DISPATCH_QUEUE_SERIAL)
  }

  deinit
  {
    // If we get here with a suspended queue, GCD will trigger a crash.
    resume()
  }

  /**

      OSAtomicIncrement32Barrier(&self.waiting)

    dispatch_async(queue) {

      OSAtomicDecrement32Barrier(&self.waiting)
      task()
    }
