Code Monkey home page Code Monkey logo

queuedthreadpool's Introduction

Thread pool and synchronization demo project

Important: Note that most of this C++ code is still -std=c++98 conform!

You only have to prevent the usage of new C++11 keywords like auto, lambda, initializer lists, override, ... Include boost header instead of std header.

For examples have a look at my demo C++ test code.

Usage infos

Unittest tracefile coverage info

TCOV=1 make
# ...
Filename

Lines

Rate Num

Functions

Rate Num

Branches

Rate Num
test_atomic_counter.cpp 100% 27 100% 4 45.1% 142
thread_pool.cpp 78.4% 37 100% 6 34.5% 200
threadpool.cpp 97.8% 314 92.0% 50 58.8% 352
threadpool.hpp 96,7% 30 100% 18 61.1% 18
threads_test.cpp 97.4% 455 100% 55 49.6% 4028

Total:

97.6% 893 96.9% 129 49.7% 4598

And ctest run without errors

make ctest
cd build && ctest -C debug
Test project /Users/clausklein/Workspace/cpp/Threadpool/build
      Start  1: async_server
 1/24 Test  #1: async_server .....................   Passed    0.01 sec
      Start  2: chrono_io_ex1
 2/24 Test  #2: chrono_io_ex1 ....................   Passed    0.01 sec
      Start  3: daytime_client
 3/24 Test  #3: daytime_client ...................   Passed    0.01 sec
      Start  4: default_executor
 4/24 Test  #4: default_executor .................   Passed    1.01 sec
      Start  5: executor
 5/24 Test  #5: executor .........................   Passed    6.99 sec
      Start  6: lockfree_spsc_queue
 6/24 Test  #6: lockfree_spsc_queue ..............   Passed    1.26 sec
      Start  7: make_future
 7/24 Test  #7: make_future ......................   Passed    0.04 sec
      Start  8: multi_thread_pass
 8/24 Test  #8: multi_thread_pass ................   Passed    0.02 sec
      Start  9: perf_shared_mutex
 9/24 Test  #9: perf_shared_mutex ................   Passed    3.34 sec
      Start 10: serial_executor
10/24 Test #10: serial_executor ..................   Passed    2.01 sec
      Start 11: shared_monitor
11/24 Test #11: shared_monitor ...................   Passed    9.16 sec
      Start 12: shared_mutex
12/24 Test #12: shared_mutex .....................   Passed   13.01 sec
      Start 13: shared_ptr
13/24 Test #13: shared_ptr .......................   Passed    0.01 sec
      Start 14: stopwatch_reporter_example
14/24 Test #14: stopwatch_reporter_example .......   Passed    0.01 sec
      Start 15: strict_lock
15/24 Test #15: strict_lock ......................   Passed    0.01 sec
      Start 16: synchronized_person
16/24 Test #16: synchronized_person ..............   Passed    0.01 sec
      Start 17: test_atomic_counter
17/24 Test #17: test_atomic_counter ..............   Passed    0.62 sec
      Start 18: test_shared_mutex
18/24 Test #18: test_shared_mutex ................   Passed    9.04 sec
      Start 19: thread_pool
19/24 Test #19: thread_pool ......................   Passed    0.01 sec
      Start 20: thread_tss_test
20/24 Test #20: thread_tss_test ..................   Passed    0.01 sec
      Start 21: trylock_test
21/24 Test #21: trylock_test .....................   Passed    0.63 sec
      Start 22: user_scheduler
22/24 Test #22: user_scheduler ...................   Passed    0.01 sec
      Start 23: volatile
23/24 Test #23: volatile .........................   Passed    0.01 sec
      Start 24: test_threads
24/24 Test #24: test_threads .....................   Passed    4.20 sec

100% tests passed, 0 tests failed out of 24

Total Test time (real) =  51.49 sec
Claus-MBP:Threadpool clausklein$

C++14 Notes

There exist a generic lock algorithm

see https://en.cppreference.com/w/cpp/thread/lock

and https://en.cppreference.com/w/cpp/named_req/Lockable

Boost provides a version of this function that takes a sequence of Lockable objects defined by a pair of iterators. std::scoped_lock offers a RAII wrapper for this function, and is generally preferred to a naked call to std::lock.

std::condition_variable_any can be used with std::shared_lock in order to wait on a std::shared_mutex in shared ownership mode. A possible use for std::condition_variable_any with custom Lockable types is to provide convenient interruptible waits: the custom lock operation would both lock the associated mutex as expected, and also perform the necessary setup to notify this condition variable when the interrupting signal is received.

References

queuedthreadpool's People

Contributors

clausklein avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.