+DISPATCH_CLASS_DECL(group);
+struct dispatch_group_s {
+ DISPATCH_SEMAPHORE_HEADER(group, dg);
+ int volatile dg_waiters;
+ struct dispatch_continuation_s *volatile dg_notify_head;
+ struct dispatch_continuation_s *volatile dg_notify_tail;
+};
+
+typedef union {
+ struct dispatch_semaphore_header_s *_dsema_hdr;
+ struct dispatch_semaphore_s *_dsema;
+ struct dispatch_group_s *_dg;
+#if USE_OBJC
+ dispatch_semaphore_t _objc_dsema;
+ dispatch_group_t _objc_dg;
+#endif
+} dispatch_semaphore_class_t DISPATCH_TRANSPARENT_UNION;
+
+dispatch_group_t _dispatch_group_create_and_enter(void);
+void _dispatch_group_dispose(dispatch_object_t dou, bool *allow_free);
+size_t _dispatch_group_debug(dispatch_object_t dou, char *buf,
+ size_t bufsiz);