• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <boost/asio/execution.hpp>
2 #include <boost/asio/static_thread_pool.hpp>
3 #include <iostream>
4 
5 using boost::asio::static_thread_pool;
6 namespace execution = boost::asio::execution;
7 
8 // Traditional active object pattern.
9 // Member functions do not block.
10 
11 class bank_account
12 {
13   int balance_ = 0;
14   mutable static_thread_pool pool_{1};
15 
16 public:
deposit(int amount)17   void deposit(int amount)
18   {
19     execution::execute(
20         pool_.executor(),
21         [this, amount]
22         {
23           balance_ += amount;
24         });
25   }
26 
withdraw(int amount)27   void withdraw(int amount)
28   {
29     execution::execute(
30         pool_.executor(),
31         [this, amount]
32         {
33           if (balance_ >= amount)
34             balance_ -= amount;
35         });
36   }
37 
print_balance() const38   void print_balance() const
39   {
40     execution::execute(
41         pool_.executor(),
42         [this]
43         {
44           std::cout << "balance = " << balance_ << "\n";
45         });
46   }
47 
~bank_account()48   ~bank_account()
49   {
50     pool_.wait();
51   }
52 };
53 
main()54 int main()
55 {
56   bank_account acct;
57   acct.deposit(20);
58   acct.withdraw(10);
59   acct.print_balance();
60 }
61