diff --git a/examples/thread/thread.q b/examples/thread/thread.q index 3ef7e5e..350168c 100644 --- a/examples/thread/thread.q +++ b/examples/thread/thread.q @@ -1,22 +1,14 @@ -import mem import sys +import thread main() { - start(thread) - start(thread) - start(thread) - thread() + thread.create(work) + thread.create(work) + thread.create(work) + work() } -start(func Pointer) { - size := 4096 - stack := mem.alloc(size) - rip := stack + size - 8 - store(rip, 8, func) - sys.clone(0x100|0x200|0x400|0x800|0x8000|0x10000|0x80000000, rip) -} - -thread() { +work() { sys.write(1, "[ ] start\n", 10) sys.write(1, "[x] end\n", 8) sys.exit(0) diff --git a/lib/thread/thread.q b/lib/thread/thread.q new file mode 100644 index 0000000..d2b2b73 --- /dev/null +++ b/lib/thread/thread.q @@ -0,0 +1,10 @@ +import mem +import sys + +create(func Pointer) -> Int { + size := 4096 + stack := mem.alloc(size) + rip := stack + size - 8 + store(rip, 8, func) + return sys.clone(0x100|0x200|0x400|0x800|0x8000|0x10000|0x80000000, rip) +} \ No newline at end of file