3 * A fixed-size queue; MT-friendly.
8 #ifndef __WORKQUEUE_H__
9 #define __WORKQUEUE_H__
12 /* This is a fixed-size queue. */
13 #define WORKQUEUE_SIZE 16
15 typedef HANDLE Semaphore;
16 typedef CRITICAL_SECTION CritSection;
18 typedef struct WorkQueue {
19 /* the master lock, need to be grabbed prior to
20 using any of the other elements of the struct. */
21 CritSection queueLock;
22 /* consumers/workers block waiting for 'workAvailable' */
23 Semaphore workAvailable;
24 Semaphore roomAvailable;
27 void** items[WORKQUEUE_SIZE];
30 extern WorkQueue* NewWorkQueue ( void );
31 extern void FreeWorkQueue ( WorkQueue* pq );
32 extern HANDLE GetWorkQueueHandle ( WorkQueue* pq );
33 extern BOOL GetWork ( WorkQueue* pq, void** ppw );
34 extern BOOL FetchWork ( WorkQueue* pq, void** ppw );
35 extern int SubmitWork ( WorkQueue* pq, void* pw );
37 #endif /* __WORKQUEUE_H__ */