大家好,欢迎来到IT知识分享网。
#include <iostream>
#include <vector>
#include <condition_variable>
#include <mutex>
#include <thread>
template <typename T>
class MessageQueue {
private:
std::mutex mu_;
std::condition_variable cv_;
std::vector<T> queue_;
public:
MessageQueue() {}
~MessageQueue(){}
T get() {
std::unique_lock<std::mutex> lk(mu_);
while(queue_.empty())
cv_.wait_for(lk,std::chrono::seconds(1));
T tt = queue_.front();
queue_.erase(queue_.begin());
}
void put(T& t) {
std::unique_lock<std::mutex> lk(mu_);
queue_.push_back(t);
cv_.notify_one();
}
};
class Worker {
public:
Worker() {}
~Worker() {}
void work(MessageQueue<int> *q) {
for(;;) {
int j = -1;
j = q->get();
std::cout << “thread is ” << std::this_thread::get_id() << std::endl;
std::cout << “j is ” << j << std::endl;
}
}
};
int main(int argc,char** argv)
{
const int THREAD_NUM = 3;
Worker worker;
MessageQueue<int> mq;
std::thread threads[THREAD_NUM];
int i = 100;
while( i > 0) {
mq.put(i);
i–;
}
for(int i = 0; i < THREAD_NUM; i++)
threads[i] = std::thread(&Worker::work,&worker,&mq);
for(int i = 0; i < THREAD_NUM; i++)
threads[i].join();
return 0;
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23090.html