From: mquinson Date: Thu, 8 Oct 2009 14:46:54 +0000 (+0000) Subject: move synchro.h to synchro_core.h because I want to use synchor primitives using dynar... X-Git-Tag: SVN~968 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c08d8ea807912cf87a5555f7b83192336c0c2608 move synchro.h to synchro_core.h because I want to use synchor primitives using dynars. Since dynar.h loads synchro_core.h, I need to split it in two parts to avoid loops in header loading git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6746 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/include/Makefile.am b/include/Makefile.am index 9b3d845c3e..692ab60ecb 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -29,7 +29,7 @@ nobase_include_HEADERS = \ xbt/graphxml.h \ \ xbt/time.h \ - xbt/synchro.h \ + xbt/synchro.h xbt/synchro_core.h\ xbt/queue.h \ \ msg/msg.h \ diff --git a/include/xbt/dynar.h b/include/xbt/dynar.h index 351a3e8b7a..02fe739ec8 100644 --- a/include/xbt/dynar.h +++ b/include/xbt/dynar.h @@ -192,7 +192,7 @@ XBT_PUBLIC(void) xbt_dynar_cursor_unlock(xbt_dynar_t dynar); * - sending such beasts over the network */ -#include "xbt/synchro.h" +#include "xbt/synchro_core.h" typedef struct xbt_dynar_s { unsigned long size; unsigned long used; diff --git a/include/xbt/synchro.h b/include/xbt/synchro.h index 0ecb2e4c61..a9e2773fb9 100644 --- a/include/xbt/synchro.h +++ b/include/xbt/synchro.h @@ -1,75 +1,21 @@ -/* $Id$ */ - /* xbt/synchro.h -- Synchronization tools */ /* Usable in simulator, (or in real life when mixing with GRAS) */ -/* Copyright (c) 2007 Martin Quinson. All rights reserved. */ +/* Copyright (c) 2007-2009 Da SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +/* synchro_core.h is splited away since it is used by dynar.h, and we use dynar here */ -#ifndef _XBT_THREAD_H -#define _XBT_THREAD_H - +#ifndef SYNCHRO_H_ +#define SYNCHRO_H_ #include "xbt/misc.h" /* SG_BEGIN_DECL */ -#include "xbt/function_types.h" - +#include "xbt/dynar.h" SG_BEGIN_DECL() -/** @addtogroup XBT_synchro - * @brief XBT synchronization tools - * - * This section describes the XBT synchronization tools. It defines types and - * functions very close to the pthread API, but widly usable. When used from - * the simulator, you will lock simulated processes as expected. When used - * from GRAS programs compiled for in-situ execution, you have synchronization - * mecanism portable to windows and UNIX. Nice, isn't it? - * - * @{ - */ - /** \brief Thread data type (opaque structure) */ - typedef struct s_xbt_thread_ *xbt_thread_t; - -XBT_PUBLIC(xbt_thread_t) xbt_thread_create(const char *name, - void_f_pvoid_t start_routine, - void *param); -XBT_PUBLIC(void) xbt_thread_exit(); -XBT_PUBLIC(xbt_thread_t) xbt_thread_self(void); -XBT_PUBLIC(const char *) xbt_thread_name(xbt_thread_t t); -XBT_PUBLIC(const char *) xbt_thread_self_name(void); - /* xbt_thread_join frees the joined thread (ie the XBT wrapper around it, the OS frees the rest) */ -XBT_PUBLIC(void) xbt_thread_join(xbt_thread_t thread); - /* Ends the life of the poor victim (not always working if it's computing, but working if it's blocked in the OS) */ -XBT_PUBLIC(void) xbt_thread_cancel(xbt_thread_t thread); - /* suicide */ -XBT_PUBLIC(void) xbt_thread_exit(void); - /* current thread pass control to any possible thread wanting it */ -XBT_PUBLIC(void) xbt_thread_yield(void); - - - /** \brief Thread mutex data type (opaque structure) */ - typedef struct s_xbt_mutex_ *xbt_mutex_t; - -XBT_PUBLIC(xbt_mutex_t) xbt_mutex_init(void); -XBT_PUBLIC(void) xbt_mutex_acquire(xbt_mutex_t mutex); -XBT_PUBLIC(void) xbt_mutex_release(xbt_mutex_t mutex); -XBT_PUBLIC(void) xbt_mutex_timedacquire(xbt_mutex_t mutex, double delay); -XBT_PUBLIC(void) xbt_mutex_destroy(xbt_mutex_t mutex); - - - /** \brief Thread condition data type (opaque structure) */ - typedef struct s_xbt_cond_ *xbt_cond_t; - -XBT_PUBLIC(xbt_cond_t) xbt_cond_init(void); -XBT_PUBLIC(void) xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex); -XBT_PUBLIC(void) xbt_cond_timedwait(xbt_cond_t cond, - xbt_mutex_t mutex, double delay); -XBT_PUBLIC(void) xbt_cond_signal(xbt_cond_t cond); -XBT_PUBLIC(void) xbt_cond_broadcast(xbt_cond_t cond); -XBT_PUBLIC(void) xbt_cond_destroy(xbt_cond_t cond); - -/** @} */ +XBT_PUBLIC(void) xbt_dynar_dopar(xbt_dynar_t datas, void_f_int_pvoid_t function); SG_END_DECL() -#endif /* _XBT_THREAD_H */ + +#endif /* SYNCHRO_H_ */ diff --git a/include/xbt/synchro_core.h b/include/xbt/synchro_core.h new file mode 100644 index 0000000000..60e9362947 --- /dev/null +++ b/include/xbt/synchro_core.h @@ -0,0 +1,77 @@ +/* $Id$ */ + +/* xbt/synchro.h -- Synchronization tools */ +/* Usable in simulator, (or in real life when mixing with GRAS) */ + +/* Copyright (c) 2007 Martin Quinson. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +/* splited away from synchro.h since we areused by dynar.h, and synchro.h uses dynar */ + + +#ifndef _XBT_THREAD_H +#define _XBT_THREAD_H + +#include "xbt/misc.h" /* SG_BEGIN_DECL */ +#include "xbt/function_types.h" + +SG_BEGIN_DECL() + +/** @addtogroup XBT_synchro + * @brief XBT synchronization tools + * + * This section describes the XBT synchronization tools. It defines types and + * functions very close to the pthread API, but widly usable. When used from + * the simulator, you will lock simulated processes as expected. When used + * from GRAS programs compiled for in-situ execution, you have synchronization + * mecanism portable to windows and UNIX. Nice, isn't it? + * + * @{ + */ + /** \brief Thread data type (opaque structure) */ + typedef struct s_xbt_thread_ *xbt_thread_t; + +XBT_PUBLIC(xbt_thread_t) xbt_thread_create(const char *name, + void_f_pvoid_t start_routine, + void *param); +XBT_PUBLIC(void) xbt_thread_exit(); +XBT_PUBLIC(xbt_thread_t) xbt_thread_self(void); +XBT_PUBLIC(const char *) xbt_thread_name(xbt_thread_t t); +XBT_PUBLIC(const char *) xbt_thread_self_name(void); + /* xbt_thread_join frees the joined thread (ie the XBT wrapper around it, the OS frees the rest) */ +XBT_PUBLIC(void) xbt_thread_join(xbt_thread_t thread); + /* Ends the life of the poor victim (not always working if it's computing, but working if it's blocked in the OS) */ +XBT_PUBLIC(void) xbt_thread_cancel(xbt_thread_t thread); + /* suicide */ +XBT_PUBLIC(void) xbt_thread_exit(void); + /* current thread pass control to any possible thread wanting it */ +XBT_PUBLIC(void) xbt_thread_yield(void); + + + /** \brief Thread mutex data type (opaque structure) */ + typedef struct s_xbt_mutex_ *xbt_mutex_t; + +XBT_PUBLIC(xbt_mutex_t) xbt_mutex_init(void); +XBT_PUBLIC(void) xbt_mutex_acquire(xbt_mutex_t mutex); +XBT_PUBLIC(void) xbt_mutex_release(xbt_mutex_t mutex); +XBT_PUBLIC(void) xbt_mutex_timedacquire(xbt_mutex_t mutex, double delay); +XBT_PUBLIC(void) xbt_mutex_destroy(xbt_mutex_t mutex); + + + /** \brief Thread condition data type (opaque structure) */ + typedef struct s_xbt_cond_ *xbt_cond_t; + +XBT_PUBLIC(xbt_cond_t) xbt_cond_init(void); +XBT_PUBLIC(void) xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex); +XBT_PUBLIC(void) xbt_cond_timedwait(xbt_cond_t cond, + xbt_mutex_t mutex, double delay); +XBT_PUBLIC(void) xbt_cond_signal(xbt_cond_t cond); +XBT_PUBLIC(void) xbt_cond_broadcast(xbt_cond_t cond); +XBT_PUBLIC(void) xbt_cond_destroy(xbt_cond_t cond); + +/** @} */ + +SG_END_DECL() +#endif /* _XBT_THREAD_H */