You might also want to look at lthread. It has some interesting functions like lthread_compute_begin()&#x2F;end() to run expensive computations inside a coroutine. the compute methods move the coroutine into an actual pthread and resume until compute_end() is called. It also has c++11 bindings called lthread-cpp which allows you to launch coroutines with variable arguments &amp; types and comes with nice socket wrappers.<p><pre><code>  void MyMethod(std::vector&lt;int&gt; my_vec) {}
  std::vector&lt;int&gt; v{1,2,3,4};
  Lthread t1{&amp;MyMethod, v};
  t1.detach()

  void my_coroutine()
  {
     lthread_compute_begin();
       ret = fibonacci(55);
     lthread_compute_end();
  }</code></pre>