/*
* 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;
}
分享到:
相关推荐
文件中展示了如何在C++中安全地进行多线程队列操作。这里使用了 `task_queue_t` 类,其中包含 `produce` 和 `consume` 方法,分别用于向队列中添加任务和从队列中获取任务。 - `produce` 方法中,首先使用 `lock_...
在Linux系统中,C++实现的线程池是一种优化多线程编程的技术,它通过预先创建一组线程,而不是在需要时才动态创建,从而提高了程序的效率和响应速度。线程池的主要思想是减少线程的创建和销毁开销,提供任务调度的...
在Linux系统中,线程池是一种高效的多线程管理机制,它通过预先创建一组线程,然后将任务分配给这些线程执行,从而避免频繁地创建和销毁线程带来的开销。C++作为一门强大的系统编程语言,可以方便地实现线程池。下面...
在Linux环境下进行C/C++应用软件的开发,面试时可能会涉及到多个方面的问题,这些知识点涵盖了操作系统原理、编程语言特性、软件工程以及系统级编程等多个领域。以下是一些可能的面试重点: 1. **C/C++语言基础**:...
标题中的“基于 C/C++实现的 DJ 混音软件源码,支持GNU/Linux, Windows, 和macOS”表明这是一个跨平台的DJ混音软件项目,使用C++编程语言编写,能够运行在三种主流操作系统上:GNU/Linux、Windows和macOS。...
实训主题:C++程序设计、C++面向对象、运算符号重载、模板、异常处理等。 实战项目:俄罗斯方块。 阶段六:大并发服务器设计 课程目标:综合应用Linux系统编程、Linux网络编程、C++所学的知识编写一个大并发服务器...
模板是C++语言的一个重要特性,STL是C++标准模板库,网络编程和多线程编程是C++开发的重要应用领域。 4. Linux环境下的C++编译、链接和调试 Linux环境是C++开发的重要平台,开发工程师需要具备Linux环境下的C++...
* 精通模板、STL、网络编程、多线程编程,了解分布式、缓存、消息、异步等机制 * 精通 Linux 环境下的 C++编译、链接和调试 * 熟悉操作系统常用命令,可以部署系统与分析性能 * 精通面向对象设计方法和设计模式,...
- 学习TCP/IP基础知识,深入socket编程,了解进程间通信机制(如消息队列、共享内存、信号量)以及多线程编程。最终实现一个小型FTP服务器miniftpd。 第五阶段:跟我一起学 C++ - 进入C++的世界,理解面向对象编程...
2. **并发处理**:掌握多线程和多进程编程,理解同步与互斥机制,如锁(mutex、condition_variable)、信号量等。 3. **异步I/O**:了解异步I/O模型,如select、poll、epoll等,以及非阻塞I/O。 4. **高性能服务器...
C++11引入了线程库,包括线程、互斥锁、条件变量、原子操作等,这些工具使得多线程编程更加方便和安全。 ### 数据结构和算法 数据结构和算法是编程的基石。链表、栈、队列、树和图是常见的数据结构,它们提供了...
6. **多线程与并发**: - 在实际系统中,打印队列可能需要处理多个并发的打印请求。这可能涉及使用互斥锁(mutexes)和条件变量(condition variables)来保证线程安全。 7. **优先级队列**: - 如果需要根据...
10. **并发与多线程**:C++11及后续版本提供了内置的多线程支持。理解线程安全、同步机制如互斥锁、条件变量,以及线程池的概念。 11. **文件系统交互**:学习如何使用C++标准库中的`fstream`类进行文件操作,以及...
Linux编程不仅涉及C和C++语言,还涉及到系统调用、多线程、网络编程、文件I/O等关键领域。 一、Linux操作系统基础 Linux是开源的操作系统,基于Unix,以其稳定性和灵活性受到开发者青睐。在Linux编程中,理解操作...
- **线程支持**:增加了多线程编程的支持,包括std::thread和其他线程安全的工具。 3. **标准模板库(STL)**:C++标准库中的一个重要组成部分,包含了大量通用算法和数据结构,如向量、列表、队列、栈等容器,以及...
线程安全则表示即使在多线程环境中,日志库也能正确地同步对共享资源的访问,避免数据竞争和死锁等问题,确保程序的稳定性。 3. **回调机制**:回调机制允许用户自定义日志处理的逻辑。例如,用户可以注册一个回调...
总的来说,完全公平队列通过精细化的队列管理和公平的资源分配,为多进程环境下的磁盘I/O提供了高效且公平的服务。在C++中实现这样的调度算法,需要深入理解操作系统调度原理以及C++语言特性,以达到性能和灵活性的...
4. **并发处理**:考虑到服务器的高并发需求,消息处理引擎可能采用了多线程或异步I/O模型,如Epoll,来并发处理多个消息,提高系统吞吐量。 5. **错误处理和异常安全**:在处理过程中,可能会遇到各种错误,如消息...
这些实例可能涵盖了如文件操作、多线程编程、网络编程、信号处理、内存管理等多个方面,对于提升编程技能非常有帮助。 源码分析和实践是提高编程能力的有效方式,通过阅读和运行这些实例,你可以更深入地了解各种...
`std::mutex`确保了多线程环境下的数据一致性,而`std::condition_variable`则提供了条件等待和通知机制。 以下是一个基础的`BlockingQueue`实现框架: ```cpp #include #include #include template class ...