Gauche VM thread 実装メモ

#define theVM   ((ScmVM*)pthread_getspecific(vm_key))
*   NOTE: the thread should still be created by Boehm-GC's pthread_create,
*   for it is the only way for GC to see the thread's stack.


VM の thread entry。

static void *thread_entry(void *data)
{
    ScmVM *vm = SCM_VM(data);
enum {
    SCM_VM_NEW,                 /* This VM is just created and not attached
                                   to the running thread.  vm->thread is not
                                   initialized. */
    SCM_VM_RUNNABLE,            /* This VM is attached to a thread which is
                                   runnable or blocked. */
    SCM_VM_BLOCKED,             /* The thread attached to this VM is stopped
                                   because of thread-yield! or thread-sleep!.
                                   Note that if the thread is blocked by
                                   system call, VM's state is still RUNNABLE.*/
    SCM_VM_TERMINATED           /* The thread attached to this VM is
                                   terminated. */
};