dispatch_overcommit.c [plain text]
#include <dispatch/dispatch.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <libkern/OSAtomic.h>
#include "dispatch_test.h"
int32_t count = 0;
const int32_t final = 32;
int
main(void)
{
test_start("Dispatch Overcommit");
dispatch_queue_attr_t attr = dispatch_queue_attr_create();
test_ptr_notnull("dispatch_queue_attr_create", attr);
dispatch_queue_attr_set_flags(attr, DISPATCH_QUEUE_OVERCOMMIT);
int i;
for (i = 0; i < final; ++i) {
char* name;
asprintf(&name, "test.overcommit.%d", i);
dispatch_queue_t queue = dispatch_queue_create(name, attr);
test_ptr_notnull("dispatch_queue_create", queue);
free(name);
dispatch_async(queue, ^{
OSAtomicIncrement32(&count);
if (count == final) {
test_long("count", count, final);
test_stop();
} else {
while (1); }
});
}
dispatch_main();
return 0;
}