线程队列头文件 ThreadQueue.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
#ifndef THREADQUEUE_H_ #define THREADQUEUE_H_ #include <pthread.h> #include <iostream> using std::cout; using std::endl; const int QUEUESIZE = 20; template < class Object > class ThreadQueue { public: ThreadQueue(); ~ThreadQueue(); public: bool Enter(Object * obj); Object *Out(); bool IsEmpty(); bool IsFull(); private: int front; //队列头 int rear; //队列尾. int size; Object *list[QUEUESIZE]; pthread_mutex_t queueMutex; }; //------------------------------------------------------ template < class Object > ThreadQueue < Object >::ThreadQueue() { front = rear = 0; size = QUEUESIZE; pthread_mutex_lock(&queueMutex); } //------------------------------------------------------ template < class Object > bool ThreadQueue < Object >::Enter(Object * obj) { pthread_mutex_lock(&queueMutex); if (IsFull()) { cout << "Queue is full!" << endl; pthread_mutex_unlock(&queueMutex); return false; } //入队 list[rear] = obj; rear = (rear + 1) % size; pthread_mutex_unlock(&queueMutex); return true; } //------------------------------------------------------ 出队列 template < class Object > Object * ThreadQueue < Object >::Out() { Object *temp; pthread_mutex_lock(&queueMutex); if (IsEmpty()) { cout << "Queue is empty!" << endl; pthread_mutex_unlock(&queueMutex); return false; } temp = list[front]; front = (front + 1) % size; pthread_mutex_unlock(&queueMutex); return temp; } //------------------------------------------------------ template < class Object > bool ThreadQueue < Object >::IsEmpty() { if (rear == front) return true; else return false; } //------------------------------------------------------ template < class Object > bool ThreadQueue < Object >::IsFull() { if ((rear + 1) % size == front) return true; else return false; } //------------------------------------------------------ template < class Object > ThreadQueue < Object >::~ThreadQueue() { delete[]list; } //------------------------------------------------------ #endif // THREADQUEUE_H_ |
主函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include "ThreadQueue.h" #include <iostream> using namespace std; struct Data { int fd; //char buf[1024]; }; int main() { ThreadQueue < Data > *t = new ThreadQueue < Data > (); int k = 10; for (int i = 1; i <= 10; i++) { Data *d = new Data(); d->fd = i; // strcpy(d->buf,"AAAA"); bool a = t->Enter(d); if (a) cout << "true" << endl; else cout << "false" << endl; } Data *temp; //int *temp; for (int i = 1; i <= 10; i++) { //temp = t->Out(); //cout << *temp << endl; temp = t->Out(); cout << temp->fd << endl; //cout << temp->buf << endl; delete temp; } return 0; } |
发表评论
要发表评论,您必须先登录。