"failstar" sounds like a name for a cruise liner from the 80s. As "*" isn't a desirable part of directory names, just name the whole thing "fail/", the core parts being stored in "fail/core/". Additionally fixing two build system dependency issues: - missing jobserver -> protomessages dependency - broken bochs -> fail dependency (add_custom_target DEPENDS only allows plain file dependencies ... cmake for the win) git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@956 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
/**
|
|
* \brief A queue for experiment data.
|
|
*
|
|
*
|
|
* \author Martin Hoffmann, Richard Hellwig
|
|
*
|
|
*/
|
|
|
|
#ifndef __SYNC_EXPERIMENT_DATA_QUEUE_H__
|
|
#define __SYNC_EXPERIMENT_DATA_QUEUE_H__
|
|
|
|
#include "ExperimentDataQueue.hpp"
|
|
#include "Signal.hpp"
|
|
|
|
namespace fi{
|
|
|
|
/**
|
|
* \class SynchronizedExperimentDataQueue
|
|
* Class which manage ExperimentData in a queue.
|
|
* Thread safe using semphores.
|
|
*/
|
|
class SynchronizedExperimentDataQueue : public ExperimentDataQueue
|
|
{
|
|
private:
|
|
/// There are maxSize elements in at a time
|
|
/// Or do we allow a really possibly huge queue?
|
|
Semaphore m_sema_full;
|
|
Semaphore m_sema_empty;
|
|
|
|
public:
|
|
SynchronizedExperimentDataQueue(int maxSize = 1024) : m_sema_full(maxSize), m_sema_empty(0) {}
|
|
~SynchronizedExperimentDataQueue() {}
|
|
|
|
/**
|
|
* Adds ExperimentData to the queue.
|
|
* @param exp ExperimentData that is to be added to the queue.
|
|
*/
|
|
void addData(ExperimentData* exp);
|
|
/**
|
|
* Returns an item from the queue
|
|
* @return the next element of the queue
|
|
*/
|
|
ExperimentData* getData();
|
|
/**
|
|
* Returns the number of elements in the queue
|
|
* @return the size of the queue
|
|
*/
|
|
size_t size() const { return m_queue.size(); };
|
|
};
|
|
|
|
};
|
|
|
|
#endif //__EXPERIMENT_DATA_QUEUE_H__
|
|
|
|
|