企业网站哪里可以做,徐州制作网站的公司有哪些,东莞整站优化,dede网站前台没有图片属性#xff1a; #xff08;1#xff09;存储任务的容器#xff0c;这个容器可以选择使用STL中的队列#xff08;queue) #xff08;2#xff09;互斥锁#xff0c;多线程访问的时候用于保护任务队列中的数据 方法#xff1a;主要是对任务队列中的任务进行操作 …属性 1存储任务的容器这个容器可以选择使用STL中的队列queue) 2互斥锁多线程访问的时候用于保护任务队列中的数据 方法主要是对任务队列中的任务进行操作 1任务队列中任务是否为空 2往任务队列中添加一个任务 3从任务队列中取出一个任务 4从任务队列中删除一个任务 根据分析就可以把这个饿汉模式的任务队列的单例类定义出来了
#include iostream
#include mutex
#include thread
#include queue
using namespace std;//创建一个饿汉模式单例
class TaskQueue
{
public:static TaskQueue* getInstance(){cout 我是一个饿汉单例模式 endl;return m_obj;}//任务队列是否为空bool isEmpty(){lock_guardmutex locker(m_mutex);return m_taskQ.empty();}//添加任务void pushTask(int task){lock_guardmutex locker(m_mutex);m_taskQ.push(task);}//删除任务bool popTask(){lock_guardmutex locker(m_mutex);if (!m_taskQ.empty()){m_taskQ.pop();return true;}return false;}//取出来一个任务int getTask(){lock_guardmutex locker(m_mutex);if (!m_taskQ.empty()){return m_taskQ.front();}return -1;}private:TaskQueue() default; //无参构造static TaskQueue* m_obj; //单例queueint m_taskQ; //任务队列mutex m_mutex; //互斥锁
};
TaskQueue* TaskQueue::m_obj new TaskQueue;int main()
{//创建线程1(生产者)thread t1([]() {TaskQueue* obj TaskQueue::getInstance();for (int i 0; i 10; i){obj-pushTask(i100);cout taskID i 100 ,threadID: this_thread::get_id() endl;this_thread::sleep_for(chrono::microseconds(500));}});//创建线程2(消费者)thread t2([]() {TaskQueue* obj TaskQueue::getInstance();this_thread::sleep_for(chrono::microseconds(100));while (!obj-isEmpty()){cout taskID obj-getTask() ,threadID: this_thread::get_id() endl;obj-popTask();this_thread::sleep_for(chrono::microseconds(500));}});t1.join();t2.join();
}