Open3

WasmLinux: 同期オブジェクトの実装

okuokuokuoku

とりあえずSemaphoreとMutexは無いと起動しなさそうなので。。

Semaphore

C++で言うところの counting_semaphore に相当する。

LKLの実装では、pthreadのmutexで実現されるものと、Posix semaphoreの両方がある。

https://github.com/lkl/linux/blob/3023e6f25fbf6d5f95b4e7ebd011fa688434ce5f/tools/lkl/lib/posix-host.c#L77-L98

Mutex

LKLが要求するmutexは mutexrecursive_mutex の両方がある。それぞれ別々のクラスなので、こちらでも別々に管理した方が良いだろう。

LKLの実装では、pthreadのmutexを直接使っている。pthreadのmutexはrecursiveかどうかをattributeで設定できる。

https://github.com/lkl/linux/blob/3023e6f25fbf6d5f95b4e7ebd011fa688434ce5f/tools/lkl/lib/posix-host.c#L144-L170

okuokuokuoku

FIXME

今回手動で関数ポインタを解決したけど、 CALL_INDIRECT に相当するマクロはAPIとしてwasm2cが提供してくれてても良いんでは。。

CALL_INDIRECT(instance->w2c_T0, void (*)(void*, u32), w2c_lin_t8, var_i1, instance->w2c_T0.data[var_i1].module_instance, var_i0);