boost lockfree高性能无锁队列

原创
2020/03/29 11:39
阅读数 6.3K
#include <boost/thread/thread.hpp>
#include <boost/lockfree/queue.hpp>
#include <iostream>
#include <glog/logging.h>
#include <boost/atomic.hpp>
 
boost::atomic_int producer_count( 0 );
boost::atomic_int consumer_count( 0 );
 
boost::lockfree::queue< int > queue( 128 );
 
const int iterations = 1 ;
const int producer_thread_count = 4 ;
const int consumer_thread_count = 4 ;
 
void producer( void ) {
for ( int i = 0 ; i != iterations; ++i) {
int value = ++producer_count;
sleep( 3 );
while (!queue.push(value));
}
}
 
boost::atomic< bool > done( false );
 
void consumer( void ) {
int value;
while (!done) {
LOG(INFO) << "start pop" ;
while (queue.pop(value)) {
sleep( 1 );
++consumer_count;
}
 
}
 
while (queue.pop(value))
++consumer_count;
}
 
int main( int argc, char *argv[]) {
using namespace std;
cout << "boost::lockfree::queue is " ;
if (!queue.is_lock_free())
cout << "not " ;
cout << "lockfree" << endl;
 
boost::thread_group producer_threads, consumer_threads;
 
for ( int i = 0 ; i != producer_thread_count; ++i)
producer_threads.create_thread(producer);
 
for ( int i = 0 ; i != consumer_thread_count; ++i)
consumer_threads.create_thread(consumer);
 
producer_threads.join_all();
done = true ;
 
consumer_threads.join_all();
 
cout << "produced " << producer_count << " objects." << endl;
cout << "consumed " << consumer_count << " objects." << endl;
}

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部