1 | #include <boost/thread/tss.hpp> // tss -> tls: thread local storage
|
---|
2 | #include <boost/thread.hpp>
|
---|
3 | #include <iostream>
|
---|
4 |
|
---|
5 | boost::mutex mutex;
|
---|
6 |
|
---|
7 | void init()
|
---|
8 | {
|
---|
9 | static boost::thread_specific_ptr<bool> tls;
|
---|
10 | if (!tls.get()) {
|
---|
11 | tls.reset(new bool(true));
|
---|
12 | boost::lock_guard<boost::mutex> lock(mutex);
|
---|
13 | std::cout << "done" << '\n';
|
---|
14 | } else if (*tls) {
|
---|
15 | *tls = false;
|
---|
16 | boost::lock_guard<boost::mutex> lock(mutex);
|
---|
17 | std::cout << "set to false" << '\n';
|
---|
18 | }
|
---|
19 | }
|
---|
20 |
|
---|
21 | void task()
|
---|
22 | {
|
---|
23 | init();
|
---|
24 | init(); // again ...
|
---|
25 | }
|
---|
26 |
|
---|
27 | int main()
|
---|
28 | {
|
---|
29 | boost::thread t[3];
|
---|
30 |
|
---|
31 | for (int i = 0; i < 3; ++i) {
|
---|
32 | t[i] = boost::thread(task);
|
---|
33 | }
|
---|
34 |
|
---|
35 | for (int i = 0; i < 3; ++i) {
|
---|
36 | t[i].join();
|
---|
37 | }
|
---|
38 | }
|
---|
39 |
|
---|