New style for PEO

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@789 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
canape 2007-11-16 11:34:20 +00:00
commit 9c87b3b0c0
132 changed files with 3781 additions and 3396 deletions

View file

@ -58,6 +58,8 @@ structure:
| |
| |
+-- tutorial APPLICATIONS +-- tutorial APPLICATIONS
|
+-- examples TSP
| |
+-- Introduction Technical introduction +-- Introduction Technical introduction
| |
@ -69,7 +71,9 @@ structure:
| |
+-- Lesson4 PSO and EA completely parallel +-- Lesson4 PSO and EA completely parallel
| |
+-- Lesson5 Multi-start : several local searches +-- Lesson5 Hybridization
|
+-- Lesson6 Multi-start : several local searches
=================================================================== ===================================================================
NOTES NOTES

View file

@ -1,4 +1,4 @@
/* /*
* <communicable.cpp> * <communicable.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -46,7 +46,8 @@ static std :: map <const Communicable *, unsigned> comm_to_key; /* Map of regist
unsigned Communicable :: num_comm = 0; unsigned Communicable :: num_comm = 0;
Communicable :: Communicable () { Communicable :: Communicable ()
{
comm_to_key [this] = key = ++ num_comm; comm_to_key [this] = key = ++ num_comm;
key_to_comm.push_back (this); key_to_comm.push_back (this);
@ -54,41 +55,48 @@ Communicable :: Communicable () {
sem_init (& sem_stop, 0, 0); sem_init (& sem_stop, 0, 0);
} }
Communicable :: ~ Communicable () { Communicable :: ~ Communicable ()
{
} }
COMM_ID Communicable :: getKey () { COMM_ID Communicable :: getKey ()
{
return key; return key;
} }
Communicable * getCommunicable (COMM_ID __key) { Communicable * getCommunicable (COMM_ID __key)
{
assert (__key < key_to_comm.size ()); assert (__key < key_to_comm.size ());
return key_to_comm [__key]; return key_to_comm [__key];
} }
COMM_ID getKey (const Communicable * __comm) { COMM_ID getKey (const Communicable * __comm)
{
return comm_to_key [__comm]; return comm_to_key [__comm];
} }
void Communicable :: lock () { void Communicable :: lock ()
{
sem_wait (& sem_lock); sem_wait (& sem_lock);
} }
void Communicable :: unlock () { void Communicable :: unlock ()
{
sem_post (& sem_lock); sem_post (& sem_lock);
} }
void Communicable :: stop () { void Communicable :: stop ()
{
sem_wait (& sem_stop); sem_wait (& sem_stop);
} }
void Communicable :: resume () { void Communicable :: resume ()
{
sem_post (& sem_stop); sem_post (& sem_stop);
} }

View file

@ -1,4 +1,4 @@
/* /*
* <communicable.h> * <communicable.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,34 +41,35 @@
typedef unsigned COMM_ID; typedef unsigned COMM_ID;
class Communicable { class Communicable
{
public : public :
Communicable (); Communicable ();
virtual ~ Communicable ();
COMM_ID getKey (); virtual ~ Communicable ();
void lock (); /* It suspends the current process if the semaphore is locked */ COMM_ID getKey ();
void unlock (); /* It unlocks the shared semaphore */
void stop (); /* It suspends the current process */ void lock (); /* It suspends the current process if the semaphore is locked */
void resume (); /* It resumes ___________ */ void unlock (); /* It unlocks the shared semaphore */
protected :
COMM_ID key; void stop (); /* It suspends the current process */
void resume (); /* It resumes ___________ */
sem_t sem_lock; protected :
sem_t sem_stop;
static unsigned num_comm; COMM_ID key;
};
extern Communicable * getCommunicable (COMM_ID __key); sem_t sem_lock;
sem_t sem_stop;
static unsigned num_comm;
};
extern Communicable * getCommunicable (COMM_ID __key);
//extern COMM_ID getKey (const Communicable * __comm); //extern COMM_ID getKey (const Communicable * __comm);

View file

@ -1,4 +1,4 @@
/* /*
* <cooperative.h> * <cooperative.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -42,28 +42,29 @@
typedef unsigned COOP_ID; typedef unsigned COOP_ID;
class Cooperative : public Communicable { class Cooperative : public Communicable
{
public : public :
Runner * getOwner (); Runner * getOwner ();
void setOwner (Runner & __runner); void setOwner (Runner & __runner);
virtual void pack () = 0; virtual void pack () = 0;
virtual void unpack () = 0;
void send (Cooperative * __coop); virtual void unpack () = 0;
virtual void notifySending (); void send (Cooperative * __coop);
private : virtual void notifySending ();
Runner * owner; private :
}; Runner * owner;
extern Cooperative * getCooperative (COOP_ID __key); };
extern Cooperative * getCooperative (COOP_ID __key);
#endif #endif

View file

@ -1,4 +1,4 @@
/* /*
* <eoPop_comm.h> * <eoPop_comm.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,17 +41,19 @@
#include "messaging.h" #include "messaging.h"
template <class EOT> void pack (const eoPop <EOT> & __pop) { template <class EOT> void pack (const eoPop <EOT> & __pop)
{
pack ((unsigned) __pop.size ()); pack ((unsigned) __pop.size ());
for (unsigned i = 0; i < __pop.size (); i ++) for (unsigned i = 0; i < __pop.size (); i ++)
pack (__pop [i]); pack (__pop [i]);
} }
template <class EOT> void unpack (eoPop <EOT> & __pop) { template <class EOT> void unpack (eoPop <EOT> & __pop)
{
unsigned n; unsigned n;
unpack (n); unpack (n);
__pop.resize (n); __pop.resize (n);
for (unsigned i = 0; i < n; i ++) for (unsigned i = 0; i < n; i ++)

View file

@ -1,4 +1,4 @@
/* /*
* <eoVector_comm.h> * <eoVector_comm.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,34 +41,36 @@
#include "messaging.h" #include "messaging.h"
template <class F, class T> void pack (const eoVector <F, T> & __v) { template <class F, class T> void pack (const eoVector <F, T> & __v)
{
if ( !__v.invalid() ) if ( !__v.invalid() )
{ {
pack( (unsigned int) 1 ); pack( (unsigned int) 1 );
pack (__v.fitness ()) ; pack (__v.fitness ()) ;
} }
else else
pack( (unsigned int) 0 ); pack( (unsigned int) 0 );
unsigned len = __v.size (); unsigned len = __v.size ();
pack (len); pack (len);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
pack (__v [i]); pack (__v [i]);
} }
template <class F, class T> void unpack (eoVector <F, T> & __v) { template <class F, class T> void unpack (eoVector <F, T> & __v)
{
F fit; F fit;
unsigned int vfit; unsigned int vfit;
unpack( vfit ); unpack( vfit );
if ( vfit ) if ( vfit )
{ {
unpack (fit); unpack (fit);
__v.fitness (fit); __v.fitness (fit);
} }
else else
__v.invalidate(); __v.invalidate();
unsigned len; unsigned len;
unpack (len); unpack (len);
__v.resize (len); __v.resize (len);
@ -76,21 +78,23 @@ template <class F, class T> void unpack (eoVector <F, T> & __v) {
unpack (__v [i]); unpack (__v [i]);
} }
template <class F, class T, class V> void pack (const eoVectorParticle <F, T, V> & __v) { template <class F, class T, class V> void pack (const eoVectorParticle <F, T, V> & __v)
{
pack (__v.fitness ()) ; pack (__v.fitness ()) ;
pack (__v.best()); pack (__v.best());
unsigned len = __v.size (); unsigned len = __v.size ();
pack (len); pack (len);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
pack (__v [i]); pack (__v [i]);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
pack (__v.bestPositions[i]); pack (__v.bestPositions[i]);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
pack (__v.velocities[i]); pack (__v.velocities[i]);
} }
template <class F, class T, class V> void unpack (eoVectorParticle <F, T, V> & __v) { template <class F, class T, class V> void unpack (eoVectorParticle <F, T, V> & __v)
{
F fit; F fit;
unpack(fit); unpack(fit);
@ -101,11 +105,11 @@ template <class F, class T, class V> void unpack (eoVectorParticle <F, T, V> & _
unpack (len); unpack (len);
__v.resize (len); __v.resize (len);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
unpack (__v [i]); unpack (__v [i]);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
unpack (__v.bestPositions[i]); unpack (__v.bestPositions[i]);
for (unsigned i = 0 ; i < len; i ++) for (unsigned i = 0 ; i < len; i ++)
unpack (__v.velocities[i]); unpack (__v.velocities[i]);
} }
#endif #endif

View file

@ -1,4 +1,4 @@
/* /*
* <messaging.h> * <messaging.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -40,44 +40,46 @@
#include <utility> #include <utility>
/* Char */ /* Char */
extern void pack (const char & __c); extern void pack (const char & __c);
/* Float */ /* Float */
extern void pack (const float & __f, int __nitem = 1); extern void pack (const float & __f, int __nitem = 1);
/* Double */ /* Double */
extern void pack (const double & __d, int __nitem = 1); extern void pack (const double & __d, int __nitem = 1);
/* Integer */ /* Integer */
extern void pack (const int & __i, int __nitem = 1); extern void pack (const int & __i, int __nitem = 1);
/* Unsigned int. */ /* Unsigned int. */
extern void pack (const unsigned int & __ui, int __nitem = 1); extern void pack (const unsigned int & __ui, int __nitem = 1);
/* Short int. */ /* Short int. */
extern void pack (const short & __sh, int __nitem = 1); extern void pack (const short & __sh, int __nitem = 1);
/* Unsigned short */ /* Unsigned short */
extern void pack (const unsigned short & __ush, int __nitem = 1); extern void pack (const unsigned short & __ush, int __nitem = 1);
/* Long */ /* Long */
extern void pack (const long & __l, int __nitem = 1); extern void pack (const long & __l, int __nitem = 1);
/* Unsigned long */ /* Unsigned long */
extern void pack (const unsigned long & __ul, int __nitem = 1); extern void pack (const unsigned long & __ul, int __nitem = 1);
/* String */ /* String */
extern void pack (const char * __str); extern void pack (const char * __str);
/* Pointer */ /* Pointer */
template <class T> void pack (const T * __ptr) { template <class T> void pack (const T * __ptr)
{
pack ((unsigned long) __ptr);
pack ((unsigned long) __ptr);
} }
/* Pair */ /* Pair */
template <class U, class V> void pack (const std :: pair <U, V> & __pair) { template <class U, class V> void pack (const std :: pair <U, V> & __pair)
{
pack (__pair.first); pack (__pair.first);
pack (__pair.second); pack (__pair.second);
} }
@ -86,46 +88,48 @@ template <class U, class V> void pack (const std :: pair <U, V> & __pair) {
// //
/* Char */ /* Char */
extern void unpack (char & __c); extern void unpack (char & __c);
/* Float */ /* Float */
extern void unpack (float & __f, int __nitem = 1); extern void unpack (float & __f, int __nitem = 1);
/* Double */ /* Double */
extern void unpack (double & __d, int __nitem = 1); extern void unpack (double & __d, int __nitem = 1);
/* Integer */ /* Integer */
extern void unpack (int & __i, int __nitem = 1); extern void unpack (int & __i, int __nitem = 1);
/* Unsigned int. */ /* Unsigned int. */
extern void unpack (unsigned int & __ui, int __nitem = 1); extern void unpack (unsigned int & __ui, int __nitem = 1);
/* Short int. */ /* Short int. */
extern void unpack (short & __sh, int __nitem = 1); extern void unpack (short & __sh, int __nitem = 1);
/* Unsigned short */ /* Unsigned short */
extern void unpack (unsigned short & __ush, int __nitem = 1); extern void unpack (unsigned short & __ush, int __nitem = 1);
/* Long */ /* Long */
extern void unpack (long & __l, int __nitem = 1); extern void unpack (long & __l, int __nitem = 1);
/* Unsigned long */ /* Unsigned long */
extern void unpack (unsigned long & __ul, int __nitem = 1); extern void unpack (unsigned long & __ul, int __nitem = 1);
/* String */ /* String */
extern void unpack (char * __str); extern void unpack (char * __str);
/* Pointer */ /* Pointer */
template <class T> void unpack (T * & __ptr) { template <class T> void unpack (T * & __ptr)
{
unsigned long p; unsigned long p;
unpack (p); unpack (p);
__ptr = (T *) p; __ptr = (T *) p;
} }
/* Pair */ /* Pair */
template <class U, class V> void unpack (std :: pair <U, V> & __pair) { template <class U, class V> void unpack (std :: pair <U, V> & __pair)
{
unpack (__pair.first); unpack (__pair.first);
unpack (__pair.second); unpack (__pair.second);
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_debug.cpp> * <peo_debug.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -56,7 +56,8 @@ static char host [MAX_BUFF_SIZE];
std :: vector <FILE *> files; std :: vector <FILE *> files;
void setDebugMode (bool __dbg) { void setDebugMode (bool __dbg)
{
debug = __dbg; debug = __dbg;
gethostname (host, MAX_BUFF_SIZE); gethostname (host, MAX_BUFF_SIZE);
@ -64,8 +65,9 @@ void setDebugMode (bool __dbg) {
extern int getNodeRank (); extern int getNodeRank ();
void initDebugging () { void initDebugging ()
{
mkdir (DEBUG_PATH, S_IRWXU); mkdir (DEBUG_PATH, S_IRWXU);
// files.push_back (stdout); // files.push_back (stdout);
char buff [MAX_BUFF_SIZE]; char buff [MAX_BUFF_SIZE];
@ -73,33 +75,37 @@ void initDebugging () {
files.push_back (fopen (buff, "w")); files.push_back (fopen (buff, "w"));
} }
void endDebugging () { void endDebugging ()
{
for (unsigned i = 0; i < files.size (); i ++) for (unsigned i = 0; i < files.size (); i ++)
if (files [i] != stdout) if (files [i] != stdout)
fclose (files [i]); fclose (files [i]);
} }
void printDebugMessage (const char * __mess) { void printDebugMessage (const char * __mess)
{
if (debug) { if (debug)
{
char buff [MAX_BUFF_SIZE]; char buff [MAX_BUFF_SIZE];
time_t t = time (0); time_t t = time (0);
/* Date */ /* Date */
sprintf (buff, "[%s][%s: ", host, ctime (& t)); sprintf (buff, "[%s][%s: ", host, ctime (& t));
* strchr (buff, '\n') = ']'; * strchr (buff, '\n') = ']';
for (unsigned i = 0; i < files.size (); i ++) for (unsigned i = 0; i < files.size (); i ++)
fprintf (files [i], buff); fprintf (files [i], buff);
/* Message */ /* Message */
sprintf (buff, "%s", __mess); sprintf (buff, "%s", __mess);
for (unsigned i = 0; i < files.size (); i ++) { for (unsigned i = 0; i < files.size (); i ++)
fputs (buff, files [i]); {
fputs ("\n", files [i]); fputs (buff, files [i]);
fflush (files [i]); fputs ("\n", files [i]);
fflush (files [i]);
}
} }
}
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_debug.h> * <peo_debug.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007

View file

@ -1,4 +1,4 @@
/* /*
* <peo_fin.cpp> * <peo_fin.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -39,7 +39,8 @@
#include "runner.h" #include "runner.h"
#include "rmc.h" #include "rmc.h"
void peo :: finalize () { void peo :: finalize ()
{
printDebugMessage ("waiting for the termination of all threads"); printDebugMessage ("waiting for the termination of all threads");

View file

@ -1,4 +1,4 @@
/* /*
* <peo_fin.h> * <peo_fin.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -37,8 +37,9 @@
#ifndef __peo_finalize_h #ifndef __peo_finalize_h
#define __peo_finalize_h #define __peo_finalize_h
namespace peo { namespace peo
{
extern void finalize (); extern void finalize ();
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_init.cpp> * <peo_init.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,24 +41,26 @@
#include "peo_debug.h" #include "peo_debug.h"
#include "rmc.h" #include "rmc.h"
namespace peo { namespace peo
{
int * argc; int * argc;
char * * * argv; char * * * argv;
void init (int & __argc, char * * & __argv) { void init (int & __argc, char * * & __argv)
{
argc = & __argc; argc = & __argc;
argv = & __argv; argv = & __argv;
/* Initializing the the Resource Management and Communication */ /* Initializing the the Resource Management and Communication */
initRMC (__argc, __argv); initRMC (__argc, __argv);
/* Loading the common parameters */ /* Loading the common parameters */
loadParameters (__argc, __argv); loadParameters (__argc, __argv);
/* */ /* */
initDebugging (); initDebugging ();
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_init.h> * <peo_init.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -37,12 +37,13 @@
#ifndef __peo_init_h #ifndef __peo_init_h
#define __peo_init_h #define __peo_init_h
namespace peo { namespace peo
{
extern int * argc; extern int * argc;
extern char * * * argv; extern char * * * argv;
extern void init (int & __argc, char * * & __argv); extern void init (int & __argc, char * * & __argv);
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_param.cpp> * <peo_param.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,7 +41,8 @@
void peo :: loadParameters (int & __argc, char * * & __argv) { void peo :: loadParameters (int & __argc, char * * & __argv)
{
eoParser parser (__argc, __argv); eoParser parser (__argc, __argv);

View file

@ -1,4 +1,4 @@
/* /*
* <peo_param.h> * <peo_param.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -37,8 +37,9 @@
#ifndef __peo_param_h #ifndef __peo_param_h
#define __peo_param_h #define __peo_param_h
namespace peo { namespace peo
{
extern void loadParameters (int & __argc, char * * & __argv); extern void loadParameters (int & __argc, char * * & __argv);
} }

View file

@ -1,4 +1,4 @@
/* /*
* <peo_run.cpp> * <peo_run.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -39,8 +39,9 @@
#include "rmc.h" #include "rmc.h"
#include "runner.h" #include "runner.h"
void peo :: run () { void peo :: run ()
{
startRunners (); startRunners ();
runRMC (); runRMC ();

View file

@ -1,4 +1,4 @@
/* /*
* <peo_run.h> * <peo_run.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -37,8 +37,9 @@
#ifndef __peo_run_h #ifndef __peo_run_h
#define __peo_run_h #define __peo_run_h
namespace peo { namespace peo
{
extern void run (); extern void run ();
} }

View file

@ -1,4 +1,4 @@
/* /*
* <reac_thread.cpp> * <reac_thread.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -40,25 +40,29 @@ static bool the_end = false;
static std :: vector <ReactiveThread *> reac_threads; static std :: vector <ReactiveThread *> reac_threads;
ReactiveThread :: ReactiveThread () { ReactiveThread :: ReactiveThread ()
{
reac_threads.push_back (this); reac_threads.push_back (this);
sem_init (& sem, 0, 0); sem_init (& sem, 0, 0);
} }
void ReactiveThread :: sleep () { void ReactiveThread :: sleep ()
{
sem_wait (& sem); sem_wait (& sem);
} }
void ReactiveThread :: wakeUp () { void ReactiveThread :: wakeUp ()
{
sem_post (& sem); sem_post (& sem);
} }
void stopReactiveThreads () { void stopReactiveThreads ()
{
the_end = true; the_end = true;
for (unsigned i = 0; i < reac_threads.size (); i ++) for (unsigned i = 0; i < reac_threads.size (); i ++)
reac_threads [i] -> wakeUp (); reac_threads [i] -> wakeUp ();
} }

View file

@ -1,4 +1,4 @@
/* /*
* <reac_thread.h> * <reac_thread.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -41,22 +41,23 @@
#include "thread.h" #include "thread.h"
class ReactiveThread : public Thread { class ReactiveThread : public Thread
{
public:
/* Ctor */ public:
ReactiveThread ();
void sleep (); /* Ctor */
ReactiveThread ();
void wakeUp ();
private:
sem_t sem; void sleep ();
}; void wakeUp ();
private:
sem_t sem;
};
extern void stopReactiveThreads (); extern void stopReactiveThreads ();

View file

@ -1,4 +1,4 @@
/* /*
* <ring_topo.cpp> * <ring_topo.cpp>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007 * (C) OPAC Team, LIFL, 2002-2007
@ -37,17 +37,19 @@
#include "ring_topo.h" #include "ring_topo.h"
void RingTopology :: setNeighbors (Cooperative * __mig, void RingTopology :: setNeighbors (Cooperative * __mig,
std :: vector <Cooperative *> & __from, std :: vector <Cooperative *> & __from,
std :: vector <Cooperative *> & __to) { std :: vector <Cooperative *> & __to)
{
__from.clear () ; __from.clear () ;
__to.clear () ; __to.clear () ;
int len = mig.size () ; int len = mig.size () ;
for (int i = 0 ; i < len ; i ++) for (int i = 0 ; i < len ; i ++)
if (mig [i] == __mig) { if (mig [i] == __mig)
__from.push_back (mig [(i - 1 + len) % len]) ; {
__to.push_back (mig [(i + 1) % len]) ; __from.push_back (mig [(i - 1 + len) % len]) ;
break; __to.push_back (mig [(i + 1) % len]) ;
break;
} }
} }

Some files were not shown because too many files have changed in this diff Show more