| /* phil_task.c - dining philosophers */ |
| |
| /* |
| * Copyright (c) 2011-2016 Wind River Systems, Inc. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr.h> |
| #include "phil.h" |
| |
| #define STSIZE 1024 |
| |
| extern void phil_entry(void); |
| extern void object_monitor(void); |
| |
| char __stack phil_stack[N_PHILOSOPHERS][STSIZE]; |
| char __stack mon_stack[STSIZE]; |
| struct k_sem forks[N_PHILOSOPHERS]; |
| |
| /** |
| * |
| * @brief Nanokernel entry point |
| * |
| */ |
| |
| int main(void) |
| { |
| int i; |
| |
| for (i = 0; i < N_PHILOSOPHERS; i++) { |
| k_sem_init(&forks[i], 0, 1); |
| k_sem_give(&forks[i]); |
| } |
| |
| /* create philosopher threads */ |
| for (i = 0; i < N_PHILOSOPHERS; i++) { |
| k_thread_spawn(&phil_stack[i][0], STSIZE, |
| (k_thread_entry_t)phil_entry, NULL, NULL, NULL, |
| K_PRIO_COOP(6), 0, K_NO_WAIT); |
| } |
| |
| /* create object counter monitor thread */ |
| k_thread_spawn(mon_stack, STSIZE, |
| (k_thread_entry_t)object_monitor, NULL, NULL, NULL, |
| K_PRIO_COOP(7), 0, K_NO_WAIT); |
| |
| return 0; |
| } |