Threading

mutex: OSMutex;

main :: fn () s32 {
    print("Start thread!!!\n");
    defer print("Threads joined!!!\n");

    os_mutex_init(&mutex);
    defer os_mutex_terminate(&mutex);

    t1 :: os_thread_create(&first, 10, true, "Hello");
    t2 :: os_thread_create(&second, 20, 0.5f);

    os_thread_join(t1);
    os_thread_join(t2);

    return 0;
}

first :: fn (args: []Any) {
    loop i := 0; i < 10; i += 1 {
        os_mutex_lock(&mutex);

        print("First thread args: [");
        loop j := 0; j < args.len; j += 1 {
            print(" % ", args[j]);
        }

        print("]\n");

        os_mutex_unlock(&mutex);
        os_sleep_ms(500.0);
    }
}

second :: fn (args: []Any) {
    loop i := 0; i < 10; i += 1 {
        os_mutex_lock(&mutex);

        print("Second thread args: [");
        loop j := 0; j < args.len; j += 1 {
            print(" % ", args[j]);
        }

        print("]\n");

        os_mutex_unlock(&mutex);
        os_sleep_ms(1000.0);
    }
}