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

nameofhsw · August 18, 2014 · Last by seiran replied at October 06, 2014 · 1800 hits

想使用 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) 导致奇怪的问题……

You need to Sign in before reply, if you don't have an account, please Sign up first.