thread safe session class added using boost::mutex
[metaproxy-moved-to-github.git] / src / test_boost_threads.cpp
1
2 #include <boost/thread/mutex.hpp>
3 #include <boost/thread/thread.hpp>
4 #include <iostream>
5
6 boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-safe!
7
8 class counter
9 {
10    public:
11       counter() : count(0) { }
12       
13       int increment() {
14          boost::mutex::scoped_lock scoped_lock(mutex);
15          return ++count;
16       }
17       
18    private:
19       boost::mutex mutex;
20       int count;
21 };
22
23 counter c;
24
25 void change_count()
26 {
27    int i = c.increment();
28    boost::mutex::scoped_lock scoped_lock(io_mutex);
29    std::cout << "count == " << i << std::endl;
30 }
31
32
33
34 int main(int, char*[])
35 {
36    try 
37    {
38       const int num_threads = 4;
39       boost::thread_group thrds;
40       for (int i=0; i < num_threads; ++i)
41          thrds.create_thread(&change_count);
42       
43       thrds.join_all();
44       
45    }
46    catch (std::exception &e) 
47    {
48       std::cout << e.what() << "\n";
49       exit(1);
50    }
51    exit(0);
52 }
53
54 /*
55  * Local variables:
56  * c-basic-offset: 4
57  * indent-tabs-mode: nil
58  * End:
59  * vim: shiftwidth=4 tabstop=8 expandtab
60  */