`

Linux下 基于模板的C++多线程安全队列

阅读更多
/*
* 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;
}

 

1
0
分享到:
评论

相关推荐

    类库KYLib 3.0.0.0 for VC6

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    程序员需要经常刷题吗-portable-lib:用于哈希表的便携式C、C++代码、布隆过滤器、字符串搜索、字符串实用程序、哈希函数、arc4r

    “C”中的类型安全模板:链表、向量、队列 单生产者单消费者无锁有界队列 多生产者、多消费者无锁有界队列 阻塞、有界、生产者-消费者队列 线程池(作业处理程序)使用 pthread 和跨线程共享队列具有 CPU 亲和性。 ...

    类库KYLib 2.1.7.0 for VS2010

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for VS2005

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.2.7 for VC6

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    类库KYLib 2.1.7.0 for centos5.4-i686

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.2.7 for centos5.4-i686

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for VS2008

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for VC6

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for VS2005_x64

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for centos6.5-i686

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.1.0.0 for VS2008_x64

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 2.1.7.0 for VS2008

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 2.1.7.0 for VC6

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.0.0 for VS2008

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.0.0 for centos5.4-i686

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 2.1.7.0 for VS2005

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.9.3 for centos6.5-i686

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

    类库KYLib 3.0.9.3 for VS2008

    字符串类KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime类型与Delphi中的TDateTime类型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, ...

Global site tag (gtag.js) - Google Analytics