aboutsummaryrefslogtreecommitdiff

matcha-threads

check-examples

A simple and unsafe implementation of cooperative-multitasking in userspace (see fibers).

This implementation should not be used for anything serious, it was just created to type some lines of asm and filll a few evenings.

Supported platforms are Linux running on - x86_64 - arm64 - armv7a - riscv64

Example

// file: demo.cc
#include "lib/executor.h"
#include "lib/thread.h"
#include <cstdio>

struct MyThread : public nMatcha::Thread {
    virtual void threadFn() override {
        puts("like");
        yield();
        puts("tea");
    }
};

int main() {
    nMatcha::Executor e;
    e.spawn(std::make_unique<MyThread>());
    e.spawn(nMatcha::FnThread::make([](nMatcha::Yielder& y) {
        puts("I");
        y.yield();
        puts("green");
    }));
    e.run();
    return 0;
}

This example demo.cc can be run as

> make -C lib && g++ -o demo demo.cc -I. lib/libmatcha.a && ./demo
...
I
like
green
tea

Setup development environment

This project provides a Dockerfile with all the required tools pre-installed.

To build and launch a container instance run

make docker

On the fist invocation this takes some minutes as it needs to build the docker image.

Additionally the locally cloned repository will be mounted into the container instance. This allows to use editors/tools installed on the host and to reduce the image disk footprint.

Build and run demo

The x86_64 demo can be run as

make demo1

The arm64 demo can be run as

make ARCH=arm64 demo1

The armv7a demo can be run as

make ARCH=arm demo1

The riscv64 demo can be run as

make ARCH=riscv64 demo1

Before starting to compile & run for a different architecture the the current build artifacts should be removed via make clean.

License

This project is licensed under the MIT license.