1 // Copyright (C) 2009 Tim Blechmann
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
8 #include <boost/thread/thread.hpp>
9 #include <boost/lockfree/queue.hpp>
12 #include <boost/atomic.hpp>
14 boost::atomic_int
producer_count(0);
15 boost::atomic_int
consumer_count(0);
17 boost::lockfree::queue
<int> queue(128);
19 const int iterations
= 10000000;
20 const int producer_thread_count
= 4;
21 const int consumer_thread_count
= 4;
25 for (int i
= 0; i
!= iterations
; ++i
) {
26 int value
= ++producer_count
;
27 while (!queue
.push(value
))
32 boost::atomic
<bool> done (false);
37 while (queue
.pop(value
))
41 while (queue
.pop(value
))
45 int main(int argc
, char* argv
[])
48 cout
<< "boost::lockfree::queue is ";
49 if (!queue
.is_lock_free())
51 cout
<< "lockfree" << endl
;
53 boost::thread_group producer_threads
, consumer_threads
;
55 for (int i
= 0; i
!= producer_thread_count
; ++i
)
56 producer_threads
.create_thread(producer
);
58 for (int i
= 0; i
!= consumer_thread_count
; ++i
)
59 consumer_threads
.create_thread(consumer
);
61 producer_threads
.join_all();
64 consumer_threads
.join_all();
66 cout
<< "produced " << producer_count
<< " objects." << endl
;
67 cout
<< "consumed " << consumer_count
<< " objects." << endl
;