/* System thread definitions Copyright (C) 2012 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ #ifndef SYSTHREAD_H #define SYSTHREAD_H #ifdef HAVE_PTHREAD #include /* A mutex in lisp is represented by a pthread condition variable. The pthread mutex associated with this condition variable is the global lock. Using a condition variable lets us implement interruptibility for lisp mutexes. */ typedef struct { struct thread_state *owner; unsigned int count; pthread_cond_t condition; } lisp_mutex_t; /* A system mutex is just a pthread mutex. This is only used for the GIL. */ typedef pthread_mutex_t sys_mutex_t; typedef pthread_cond_t sys_cond_t; /* A system thread. */ typedef pthread_t sys_thread_t; #else #error port me #endif typedef void *(thread_creation_function) (void *); extern void sys_mutex_init (sys_mutex_t *); extern void sys_mutex_lock (sys_mutex_t *); extern void sys_mutex_unlock (sys_mutex_t *); extern void sys_mutex_destroy (sys_mutex_t *); extern void sys_cond_init (sys_cond_t *); extern void sys_cond_wait (sys_cond_t *, sys_mutex_t *); extern void sys_cond_signal (sys_cond_t *); extern void sys_cond_broadcast (sys_cond_t *); extern void sys_cond_destroy (sys_cond_t *); extern void lisp_mutex_init (lisp_mutex_t *); extern void lisp_mutex_lock (lisp_mutex_t *); extern void lisp_mutex_unlock (lisp_mutex_t *); extern void lisp_mutex_destroy (lisp_mutex_t *); extern sys_thread_t sys_thread_self (void); extern int sys_thread_equal (sys_thread_t, sys_thread_t); extern int sys_thread_create (sys_thread_t *, thread_creation_function *, void *); extern void sys_thread_yield (void); #endif /* SYSTHREAD_H */