Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
40 lines (28 sloc) 1.89 KB
/* Simple threaded work queue using POSIX threads.
*/
#ifndef eslWORKQUEUE_INCLUDED
#define eslWORKQUEUE_INCLUDED
#include "esl_config.h"
typedef struct {
pthread_mutex_t queueMutex; /* mutex for queue serialization */
pthread_cond_t readerQueueCond; /* condition variable used to wake up the producer */
pthread_cond_t workerQueueCond; /* condition variable used to wake up the consumers */
void **readerQueue; /* list of objects the the workers have completed */
int readerQueueCnt; /* number of objects in the queue */
int readerQueueHead; /* first object in the queue */
void **workerQueue; /* list of objects ready to be processed by worker threads */
int workerQueueCnt; /* number of objects in the queue */
int workerQueueHead; /* first object in the queue */
int queueSize; /* max number of items a queue will hold */
int pendingWorkers; /* number of consumers waiting for work */
} ESL_WORK_QUEUE;
extern ESL_WORK_QUEUE *esl_workqueue_Create(int size);
extern void esl_workqueue_Destroy(ESL_WORK_QUEUE *queue);
extern int esl_workqueue_Init (ESL_WORK_QUEUE *queue, void *ptr);
extern int esl_workqueue_Complete(ESL_WORK_QUEUE *queue);
extern int esl_workqueue_Reset (ESL_WORK_QUEUE *queue);
extern int esl_workqueue_Remove(ESL_WORK_QUEUE *queue, void **obj);
extern int esl_workqueue_ReaderUpdate(ESL_WORK_QUEUE *queue, void *in, void **out);
extern int esl_workqueue_WorkerUpdate(ESL_WORK_QUEUE *queue, void *in, void **out);
extern int esl_workqueue_Dump(ESL_WORK_QUEUE *queue);
#endif /*eslWORKQUEUE_INCLUDED*/
You can’t perform that action at this time.