Ruby Ruby 如何使用 C 扩展多线程

nameofhsw · 2014年08月18日 · 最后由 seiran 回复于 2014年10月06日 · 1807 次阅读

想使用 C 写一个线程池,然后再在 ruby 程序中使用这个线程池来实现多线程。 有相关的开源库或者指点下,如何让 C 创建的线程能够调用 ruby 的程序吗? 具体的过程中: C 只负责线程管理,线程具体所作的事情由 ruby 来实现。 所以就存在一个问题,C 创建线程的函数 pthread_create 是通过传递函数指针来设定线程运行程序的,ruby 的代码如何传给这个函数呢?好像没有函数指针的说法

可以用 Fiddle::Closure(ruby ~>2.0) 或者 ffi(rubygems) 的有关方法来把一个 lambda 变成一个函数指针类似的东西,比如假设这个方法叫做 foo,那么 foo{|a| p a }可以变成一个有函数指针的东西,效果是把传进去的第一个参数 p 出来,这是 CRuby 做 Callback 的一种方法,但是如果你想把这个 Callback 作为创建线程的参数,也就是可能有真多线程,可能会因为全局虚拟机锁 (GVML/GIL,目前版本的 CRuby) 导致奇怪的问题……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号