+++ /dev/null
-#include <dispatch/dispatch.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <limits.h>
-#include <assert.h>
-
-#include "dispatch_test.h"
-
-#define LAPS 10000
-#define INTERVAL 100
-
-static size_t r_count = LAPS;
-static size_t w_count = LAPS / INTERVAL;
-
-static void
-writer(void *ctxt __attribute__((unused)))
-{
- if (--w_count == 0) {
- if (r_count == 0) {
- test_stop();
- }
- }
-}
-
-static void
-reader(void *ctxt __attribute__((unused)))
-{
- if (__sync_sub_and_fetch(&r_count, 1) == 0) {
- if (r_count == 0) {
- test_stop();
- }
- }
-}
-
-int
-main(void)
-{
- dispatch_queue_t dq;
-
- test_start("Dispatch Reader/Writer Queues");
-
- dq = dispatch_queue_create("com.apple.libdispatch.test_readsync", NULL);
- assert(dq);
-
- dispatch_queue_set_width(dq, LONG_MAX);
-
- dispatch_apply(LAPS, dispatch_get_concurrent_queue(0), ^(size_t idx) {
- dispatch_sync_f(dq, NULL, reader);
-
- if (idx % INTERVAL) {
- dispatch_barrier_async_f(dq, NULL, writer);
- }
- });
-
- dispatch_release(dq);
-
- dispatch_main();
-}