title: Does dispatch_async block to serial queue keeps order?
body: <p>When I submit two blocks into a serial queue by dispatch_async, does it assure the second one runs after the first one: <br/></p>
  
  <ul>
  <li>dispatch_async(serial_queue, b1);</li>
  <li>dispatch_async(serial_queue, b2);</li>
  </ul>
  
  <p>can we assure b1 runs before b2?</p>
  
  <p>Below is full source code section:</p>
  
  <pre><code>
  
      #define COUNTER 10000
        m_value = 0;
        dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_queue_t queue = dispatch_queue_create("myqueue", NULL);
        dispatch_group_t group = dispatch_group_create();
         for (int i = 0; i &lt COUNTER; ++i) {
          dispatch_group_async(group, globalQueue, ^() {
            dispatch_async(queue, ^() {
              ++m_value;
            });
          });
        }
        dispatch_group_notify(group, queue, ^() {
          NSLog(@"m_value Actual: %d Expected: %d", m_value, COUNTER);
        });
  
        dispatch_release(queue);
        dispatch_release(group);
        queue = nil;
        group = nil;
        return YES;
  
  </code></pre>
  
  <p>Can we assure m_value == COUNTER always?  Thanks</p>