GNU Pthでコルーチン

Cygwinで動いた。
GNU Pthが一般的なのかな…libfiberもあったけど。

#include <stdio.h>
#include <pth.h>

void *handler(void *arg) {
  pth_t mth = (pth_t) arg;

  while (1) {
    puts("spring");
    pth_yield(mth);
    puts("summer");
    pth_yield(mth);
    puts("autumn");
    pth_yield(mth);
    puts("winter");
    pth_yield(mth);
  }

  return NULL;
}

int main() {
  pth_t mth, th;

  pth_init();

  mth = pth_self();
  th = pth_spawn(PTH_ATTR_DEFAULT, &handler, mth);

  while (1) {
    fgetc(stdin);
    pth_yield(th);
  }

  pth_kill();

  return 0;
}