rb_thread_create のサンプル書いてみた。
下記コマンド実行で動くはず。
$ ruby extconf.rb
$ make
$ ruby fib.rb
test1.c と fib.c が拡張ライブラリで、fib.rb が拡張ライブラリ利用者。
(fib.rb)
$LOAD_PATH << "."
require "test"
include Test
Test.thread
(fib.c)
#include <stdio.h>
int fib( int n )
{
if( n < 0 ) return -1;
if( n == 0 ) return 1;
if( n == 1 ) return 1;
if( n > 1 ) return fib( n-1 ) + fib( n-2 );
}
(test1.c)
#include "ruby.h"
int fib();
int gloval = 0;
VALUE wrap_fib( VALUE self )
{
int n;
int count = 0;
for( count = 0; count < 30; count++ )
{
n = gloval;
printf( "fib(%d):%d\n", n, fib(n) );
gloval = (n + 1) % 30;
}
return Qnil;
}
VALUE wrap_thread( VALUE self )
{
rb_thread_create( wrap_fib, NULL);
return Qnil;
}
void Init_test()
{
VALUE module;
module = rb_define_module( "Test" );
rb_define_module_function( module, "thread", wrap_thread, 0 );
}
(extconf.rb)
require 'mkmf'
create_makefile( "test" )