summaryrefslogtreecommitdiff
path: root/src/example.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2018-05-02 13:23:15 -0700
committerVito Caputo <vcaputo@pengaru.com>2018-05-02 13:23:15 -0700
commit7fd168d9bf3775380044ea4b71d693f195e8033c (patch)
treec5b87e1ed288e12661b003fd59c328ee02559f64 /src/example.c
parent2bd219830969c555358301dd7d978f6885477a9d (diff)
*: initial commit of libpulp
libpulp is a very basic cooperatively-scheduled userspace threading library. It refers to the userspace threads as fibers, and uses my other little library libthunk to bind the functions and their calling environment into tidy little structures having a uniform calling convention. At this time there's no build system or anything of the sort, it's early days and I'll probably be submoduling this into another project for direct inclusion and compilation.
Diffstat (limited to 'src/example.c')
-rw-r--r--src/example.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/example.c b/src/example.c
new file mode 100644
index 0000000..f8d4ba8
--- /dev/null
+++ b/src/example.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2018 Vito Caputo - <vcaputo@pengaru.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <pulp.h>
+#include <stdio.h>
+#include <thunk.h>
+
+
+THUNK_DEFINE(bar, int, id)
+{
+ printf("%i ", id);
+ return 0;
+}
+
+
+THUNK_DEFINE(foo, pulp_t *, p, int, w, int, h)
+{
+ for (int y = 0; y < h; y++) {
+ printf("\nw=%i h=%i\n", w, h);
+ for (int x = 0; x < w; x++)
+ (void) pulp_fiber_new(p, (w - x), THUNK(bar(x)));
+
+ pulp_msleep(p, w + 1);
+ }
+
+ return 0;
+}
+
+
+int main(int argc, char *argv[])
+{
+ pulp_t *p;
+
+ p = pulp_new();
+ (void) pulp_fiber_new(p, 0, THUNK(foo(p, 40, 100)));
+ pulp_run(p);
+ pulp_free(p);
+
+ return 0;
+}
© All Rights Reserved