X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Flbalance%2F_info;h=532da2d5ae6f9e1a9ecaa83ac02e8572bb1594ee;hb=c656dceb3f04c2e3da7af40824c97eff5119a0b9;hp=c0d0ab0e5a4fa7fb362b0ebb8a0a15da53ee9627;hpb=f69389e6806e2f0b63084576ffa4c84bba699147;p=ccan diff --git a/ccan/lbalance/_info b/ccan/lbalance/_info index c0d0ab0e..532da2d5 100644 --- a/ccan/lbalance/_info +++ b/ccan/lbalance/_info @@ -1,4 +1,6 @@ +/* Licensed under GPLv3+ - see LICENSE file for details */ #include "config.h" +#include #include /** @@ -9,6 +11,72 @@ * * License: GPL * Author: Rusty Russell + * + * Example: + * // Run 1000 of the given commandline at best-known parallel rate. + * // See tools/lbalance.c for a sligtly more serious example. + * #include + * #include + * #include + * #include + * #include + * #include + * + * #define MAX 1000 + * + * static pid_t spawn(char *args[]) + * { + * pid_t pid = fork(); + * + * if (pid == -1) + * err(1, "forking"); + * if (pid == 0) { + * execvp(args[0], args); + * err(1, "exec failed"); + * } + * return pid; + * } + * + * int main(int argc, char *argv[]) + * { + * unsigned int num = 0, num_running = 0; + * pid_t pids[MAX]; + * struct lbalance_task *tasks[MAX]; + * struct lbalance *lb; + * + * if (argc == 1) + * errx(1, "Usage: %s cmdline...", argv[0]); + * + * lb = lbalance_new(); + * + * while (num - num_running < MAX) { + * struct rusage ru; + * pid_t pid; + * unsigned int i; + * + * // Make sure we're running as many as lbalance says to. + * while (num_running < lbalance_target(lb) && num < MAX) { + * pids[num] = spawn(argv+1); + * tasks[num] = lbalance_task_new(lb); + * num++; + * num_running++; + * } + * + * // Now wait for something to die. + * pid = wait3(NULL, 0, &ru); + * // Find it, tell lbalance it's finished. + * for (i = 0; i < num; i++) { + * if (pids[i] == pid) { + * lbalance_task_free(tasks[i], &ru); + * pids[i] = 0; + * break; + * } + * } + * num_running--; + * } + * lbalance_free(lb); + * return 0; + * } */ int main(int argc, char *argv[]) { @@ -17,7 +85,7 @@ int main(int argc, char *argv[]) return 1; if (strcmp(argv[1], "depends") == 0) { - printf("ccan/tlist\n"); + printf("ccan/tlist2\n"); return 0; }