Ruby 4.0 リファレンスマニュアル

function rb_nogvl

[edit]
void * rb_nogvl(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2, int flags)

func を GVL を解放して呼び出します。 rb_thread_call_without_gvl と同じですが、動作を変える flags を追加で受け取ります。 func を呼ぶ前に保留中の割り込みを処理し、func から戻って GVL を再取得したあとで、その間に発生した割り込みを処理します。他のスレッドから Thread#kill などで割り込まれたときは ubf が呼ばれます。 func の中では、メソッド呼び出しや例外の発生など、ほとんどの Ruby の C API は使えません。

[PARAM] func:
GVL なしで呼び出す関数です。
[PARAM] data1:
func にそのまま渡されます。
[PARAM] ubf:
func を中断させるための関数です。
[PARAM] data2:
ubf にそのまま渡されます。
[PARAM] flags:
RB_NOGVL_INTR_FAIL などのフラグの論理和です。
[RETURN]
func の返り値です。ubf によって func が中断されたときは 0 です。