/*
* ThreadQueue.h
*
* Created on: 2008-11-13
* Author: root
*/
#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_ */
以下为main.cpp
/*
* main.cpp
*
* Created on: 2008-11-13
* Author: root
*/
#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;
}
分享到:
相关推荐
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
“C”中的类型安全模板:链表、向量、队列 单生产者单消费者无锁有界队列 多生产者、多消费者无锁有界队列 阻塞、有界、生产者-消费者队列 线程池(作业处理程序)使用 pthread 和跨线程共享队列具有 CPU 亲和性。 ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...
字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...