.. zephyr:code-sample:: multi-thread-blinky :name: Basic thread manipulation :relevant-api: gpio_interface thread_apis Spawn multiple threads that blink LEDs and print information to the console. Overview ******** This example demonstrates spawning multiple threads using :c:func:`K_THREAD_DEFINE`. It spawns three threads. Each thread is then defined at compile time using K_THREAD_DEFINE. The first two each control an LED. These LEDs, ``led0`` and ``led1``, have loop control and timing logic controlled by separate functions. - ``blink0()`` controls ``led0`` and has a 100ms sleep cycle - ``blink1()`` controls ``led1`` and has a 1000ms sleep cycle When either of these threads toggles its LED, it also pushes information into a :ref:`FIFO ` identifying the thread/LED and how many times it has been toggled. The third thread uses :c:func:`printk` to print the information added to the FIFO to the device console. Requirements ************ The board must have two LEDs connected via GPIO pins. These are called "User LEDs" on many of Zephyr's :ref:`boards`. The LEDs must be configured using the ``led0`` and ``led1`` :ref:`devicetree ` aliases, usually in the :ref:`BOARD.dts file `. You will see one of these errors if you try to build this sample for an unsupported board: .. code-block:: none Unsupported board: led0 devicetree alias is not defined Unsupported board: led1 devicetree alias is not defined Building ******** For example, to build this sample for :ref:`96b_carbon_board`: .. zephyr-app-commands:: :zephyr-app: samples/basic/threads :board: 96b_carbon/stm32f401xe :goals: build flash :compact: Change ``96b_carbon/stm32f401xe`` appropriately for other supported boards.