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

      OSAtomicIncrement32Barrier(&self.waiting)

    dispatch_async(queue) {
      OSAtomicDecrement32Barrier(&self.waiting)
      task()
    }


  private var waiting: Int32 = 0

  private var busy: Int64 = 0

  init(name: String)
  {
    let qname = name // +String(Int(arc4random())+Int(1e9))
    queue = dispatch_queue_create(qname, DISPATCH_QUEUE_SERIAL)
  }

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

//    if let name = String.fromCString(dispatch_queue_get_label(queue))
//    {
//      println(name + ": \(busy)")
//    }
  }

  /**
