1.. zephyr:code-sample:: kernel-condvar
2   :name: Condition Variables
3   :relevant-api: condvar_apis
4
5   Manipulate condition variables in a multithreaded application.
6
7Overview
8********
9
10This sample demonstrates the usage of :ref:`condition variables <condvar>` in a
11multithreaded application. Condition variables are used with a mutex
12to signal changing states (conditions) from one thread to another
13thread. A thread uses a condition variable to wait for a condition to
14become true. Different threads alternate between their entry point
15function execution based on when they signal the other thread that is
16pending on the condition variable. The sample can be used with any
17:ref:`supported board <boards>` and prints the sample output shown to
18the console.
19
20Building and Running
21********************
22
23This application can be built and executed on :ref:`native_sim <native_sim>` as follows:
24
25.. zephyr-app-commands::
26   :zephyr-app: samples/kernel/condition_variables/condvar
27   :host-os: unix
28   :board: native_sim
29   :goals: run
30   :compact:
31
32To build for another board, change ``native_sim`` above to that board's name.
33
34Sample Output
35=============
36
37.. code-block:: console
38
39    Starting watch_count: thread 1
40    watch_count: thread 1 Count= 0. Going into wait...
41    inc_count: thread 2, count = 1, unlocking mutex
42    inc_count: thread 3, count = 2, unlocking mutex
43    inc_count: thread 2, count = 3, unlocking mutex
44    inc_count: thread 3, count = 4, unlocking mutex
45    inc_count: thread 2, count = 5, unlocking mutex
46    inc_count: thread 3, count = 6, unlocking mutex
47    inc_count: thread 2, count = 7, unlocking mutex
48    inc_count: thread 3, count = 8, unlocking mutex
49    inc_count: thread 2, count = 9, unlocking mutex
50    inc_count: thread 3, count = 10, unlocking mutex
51    inc_count: thread 2, count = 11, unlocking mutex
52    inc_count: thread 3, count = 12  Threshold reached.Just sent signal.
53    inc_count: thread 3, count = 12, unlocking mutex
54    watch_count: thread 1 Condition signal received. Count= 12
55    watch_count: thread 1 Updating the value of count...
56    watch_count: thread 1 count now = 137.
57    watch_count: thread 1 Unlocking mutex.
58    inc_count: thread 2, count = 138, unlocking mutex
59    inc_count: thread 3, count = 139, unlocking mutex
60    inc_count: thread 2, count = 140, unlocking mutex
61    inc_count: thread 3, count = 141, unlocking mutex
62    inc_count: thread 2, count = 142, unlocking mutex
63    inc_count: thread 3, count = 143, unlocking mutex
64    inc_count: thread 2, count = 144, unlocking mutex
65    inc_count: thread 3, count = 145, unlocking mutex
66    Main(): Waited and joined with 3 threads. Final value of count = 145. Done.
67