Open3
WasmLinux: 同期オブジェクトの実装
とりあえずSemaphoreとMutexは無いと起動しなさそうなので。。
Semaphore
C++で言うところの counting_semaphore
に相当する。
LKLの実装では、pthreadのmutexで実現されるものと、Posix semaphoreの両方がある。
Mutex
LKLが要求するmutexは mutex
と recursive_mutex
の両方がある。それぞれ別々のクラスなので、こちらでも別々に管理した方が良いだろう。
LKLの実装では、pthreadのmutexを直接使っている。pthreadのmutexはrecursiveかどうかをattributeで設定できる。
たぶんできた
とりあえずthreadが起動してpanicするまで一気に実装したので、そろそろ真面目にinitに取り組む必要がありそうだ。。
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);