Semaphore

#include <zephyr/kernel.h>

K_SEM_DEFINE(user_sem, 0, 1);

void producer_task(void) {
  while (1) {
    printk("Producer give sem.\n");

    k_sem_give(&user_sem);

    k_sleep(K_SECONDS(1));
  }
}

void consumer_task(void) {
  while (1) {
    k_sem_take(&user_sem, K_FOREVER);

    printk("Consumer taken sum.\n");
  }
}

K_THREAD_DEFINE(sem_producer_id, 1024, producer_task, NULL, NULL, NULL, 2, 0,
                0);

K_THREAD_DEFINE(sem_consumer_id, 1024, consumer_task, NULL, NULL, NULL, 2, 0,
                0);

Last modified: 2026-05-24