âšī¸ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 2.9 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | FAIL | meta_canonical IS NULL OR = '' OR = src_unparsed | org,boost!www,/doc/libs/latest/doc/html/lockfree/examples.html s443 |
| Property | Value |
|---|---|
| URL | https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/examples.html |
| Last Crawled | 2026-01-09 15:09:38 (2 months ago) |
| First Indexed | 2018-05-01 11:34:52 (7 years ago) |
| HTTP Status Code | 200 |
| Meta Title | Examples |
| Meta Description | null |
| Meta Canonical | org,boost!www,/doc/libs/latest/doc/html/lockfree/examples.html s443 |
| Boilerpipe Text | Queue
The
boost::lockfree::queue
class implements a multi-writer/multi-reader queue. The following example shows
how integer values are produced and consumed by 4 threads each:
#include
<
boost
/
thread
/
thread
.
hpp
>
#include
<
boost
/
lockfree
/
queue
.
hpp
>
#include
<
iostream
>
#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
=
10000000
;
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
;
while
(!
queue
.
push
(
value
))
;
}
}
boost
::
atomic
<
bool
>
done
(
false
);
void
consumer
(
void
)
{
int
value
;
while
(!
done
)
{
while
(
queue
.
pop
(
value
))
++
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
;
}
The program output is:
produced 40000000 objects.
consumed 40000000 objects.
Stack
The
boost::lockfree::stack
class implements a multi-writer/multi-reader stack. The following example shows
how integer values are produced and consumed by 4 threads each:
#include
<
boost
/
thread
/
thread
.
hpp
>
#include
<
boost
/
lockfree
/
stack
.
hpp
>
#include
<
iostream
>
#include
<
boost
/
atomic
.
hpp
>
boost
::
atomic_int
producer_count
(
0
);
boost
::
atomic_int
consumer_count
(
0
);
boost
::
lockfree
::
stack
<
int
>
stack
(
128
);
const
int
iterations
=
1000000
;
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
;
while
(!
stack
.
push
(
value
))
;
}
}
boost
::
atomic
<
bool
>
done
(
false
);
void
consumer
(
void
)
{
int
value
;
while
(!
done
)
{
while
(
stack
.
pop
(
value
))
++
consumer_count
;
}
while
(
stack
.
pop
(
value
))
++
consumer_count
;
}
int
main
(
int
argc
,
char
*
argv
[])
{
using
namespace
std
;
cout
<<
"boost::lockfree::stack is "
;
if
(!
stack
.
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
;
}
The program output is:
produced 4000000 objects.
consumed 4000000 objects.
Waitfree
Single-Producer/Single-Consumer Queue
The
boost::lockfree::spsc_queue
class implements a wait-free single-producer/single-consumer queue. The following
example shows how integer values are produced and consumed by 2 separate threads:
#include
<
boost
/
thread
/
thread
.
hpp
>
#include
<
boost
/
lockfree
/
spsc_queue
.
hpp
>
#include
<
iostream
>
#include
<
boost
/
atomic
.
hpp
>
int
producer_count
=
0
;
boost
::
atomic_int
consumer_count
(
0
);
boost
::
lockfree
::
spsc_queue
<
int
,
boost
::
lockfree
::
capacity
<
1024
>
>
spsc_queue
;
const
int
iterations
=
10000000
;
void
producer
(
void
)
{
for
(
int
i
=
0
;
i
!=
iterations
;
++
i
)
{
int
value
=
++
producer_count
;
while
(!
spsc_queue
.
push
(
value
))
;
}
}
boost
::
atomic
<
bool
>
done
(
false
);
void
consumer
(
void
)
{
int
value
;
while
(!
done
)
{
while
(
spsc_queue
.
pop
(
value
))
++
consumer_count
;
}
while
(
spsc_queue
.
pop
(
value
))
++
consumer_count
;
}
int
main
(
int
argc
,
char
*
argv
[])
{
using
namespace
std
;
cout
<<
"boost::lockfree::queue is "
;
if
(!
spsc_queue
.
is_lock_free
())
cout
<<
"not "
;
cout
<<
"lockfree"
<<
endl
;
boost
::
thread
producer_thread
(
producer
);
boost
::
thread
consumer_thread
(
consumer
);
producer_thread
.
join
();
done
=
true
;
consumer_thread
.
join
();
cout
<<
"produced "
<<
producer_count
<<
" objects."
<<
endl
;
cout
<<
"consumed "
<<
consumer_count
<<
" objects."
<<
endl
;
}
The program output is:
produced 10000000 objects.
consumed 10000000 objects. |
| Markdown | # [ Boost C++ Libraries](https://www.boost.org/)
"...one of the most highly regarded and expertly designed C++ library projects in the world." â [Herb Sutter](https://herbsutter.com/) and [Andrei Alexandrescu](http://en.wikipedia.org/wiki/Andrei_Alexandrescu), [C++ Coding Standards](https://books.google.com/books/about/C++_Coding_Standards.html?id=mmjVIC6WolgC)
Search...
This is an older version of Boost and was released in 2017. The [current version](https://www.boost.org/doc/libs/latest/doc/html/lockfree/examples.html) is 1.90.0.
[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/index.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/rationale.html)
## [Examples](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/examples.html "Examples")
### [Queue](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/examples.html#lockfree.examples.queue)
The `boost::lockfree::queue` class implements a multi-writer/multi-reader queue. The following example shows how integer values are produced and consumed by 4 threads each:
```
#include <boost/thread/thread.hpp>
#include <boost/lockfree/queue.hpp>
#include <iostream>
#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 = 10000000;
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;
while (!queue.push(value))
;
}
}
boost::atomic<bool> done (false);
void consumer(void)
{
int value;
while (!done) {
while (queue.pop(value))
++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;
}
```
The program output is:
```
produced 40000000 objects.
consumed 40000000 objects.
```
### [Stack](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/examples.html#lockfree.examples.stack)
The `boost::lockfree::stack` class implements a multi-writer/multi-reader stack. The following example shows how integer values are produced and consumed by 4 threads each:
```
#include <boost/thread/thread.hpp>
#include <boost/lockfree/stack.hpp>
#include <iostream>
#include <boost/atomic.hpp>
boost::atomic_int producer_count(0);
boost::atomic_int consumer_count(0);
boost::lockfree::stack<int> stack(128);
const int iterations = 1000000;
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;
while (!stack.push(value))
;
}
}
boost::atomic<bool> done (false);
void consumer(void)
{
int value;
while (!done) {
while (stack.pop(value))
++consumer_count;
}
while (stack.pop(value))
++consumer_count;
}
int main(int argc, char* argv[])
{
using namespace std;
cout << "boost::lockfree::stack is ";
if (!stack.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;
}
```
The program output is:
```
produced 4000000 objects.
consumed 4000000 objects.
```
### [Waitfree Single-Producer/Single-Consumer Queue](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/examples.html#lockfree.examples.waitfree_single_producer_single_consumer_queue)
The `boost::lockfree::spsc_queue` class implements a wait-free single-producer/single-consumer queue. The following example shows how integer values are produced and consumed by 2 separate threads:
```
#include <boost/thread/thread.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <iostream>
#include <boost/atomic.hpp>
int producer_count = 0;
boost::atomic_int consumer_count (0);
boost::lockfree::spsc_queue<int, boost::lockfree::capacity<1024> > spsc_queue;
const int iterations = 10000000;
void producer(void)
{
for (int i = 0; i != iterations; ++i) {
int value = ++producer_count;
while (!spsc_queue.push(value))
;
}
}
boost::atomic<bool> done (false);
void consumer(void)
{
int value;
while (!done) {
while (spsc_queue.pop(value))
++consumer_count;
}
while (spsc_queue.pop(value))
++consumer_count;
}
int main(int argc, char* argv[])
{
using namespace std;
cout << "boost::lockfree::queue is ";
if (!spsc_queue.is_lock_free())
cout << "not ";
cout << "lockfree" << endl;
boost::thread producer_thread(producer);
boost::thread consumer_thread(consumer);
producer_thread.join();
done = true;
consumer_thread.join();
cout << "produced " << producer_count << " objects." << endl;
cout << "consumed " << consumer_count << " objects." << endl;
}
```
The program output is:
```
produced 10000000 objects.
consumed 10000000 objects.
```
| | |
|---|---|
| | Copyright Š 2008-2011 Tim Blechmann Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE\_1\_0.txt or copy at <http://www.boost.org/LICENSE_1_0.txt>) |
***
[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/index.html)[](https://www.boost.org/doc/libs/1_65_0/doc/html/lockfree/rationale.html) |
| Readable Markdown | null |
| Shard | 76 (laksa) |
| Root Hash | 2177253573749532476 |
| Unparsed URL | org,boost!www,/doc/libs/1_65_0/doc/html/lockfree/examples.html s443 |