14#include "kstd_cstring"
25std::atomic<int> g_task_a_counter{0};
26std::atomic<int> g_task_b_counter{0};
28void thread_func_a(
void* arg) {
29 uint64_t
id = (uint64_t)arg;
30 for (
int i = 0; i < 5; ++i) {
31 klog::Info(
"Thread A: running, arg={}, iter={}",
id, i);
39void thread_func_b(
void* arg) {
40 uint64_t
id = (uint64_t)arg;
41 for (
int i = 0; i < 5; ++i) {
42 klog::Info(
"Thread B: running, arg={}, iter={}",
id, i);
57 auto task_a = kstd::make_unique<TaskControlBlock>(
"Task A", 10, thread_func_a,
59 TaskManagerSingleton::instance().AddTask(std::move(task_a));
62 auto task_b = kstd::make_unique<TaskControlBlock>(
"Task B", 10, thread_func_b,
64 TaskManagerSingleton::instance().AddTask(std::move(task_b));
72 if (g_task_a_counter >= 5 && g_task_b_counter >= 5) {
78 EXPECT_GT(timeout, 0,
"Tasks should complete before timeout");
79 EXPECT_EQ(g_task_a_counter, 5,
"Task A count");
80 EXPECT_EQ(g_task_b_counter, 5,
"Task B count");
auto kernel_task_test() -> bool
auto Info(etl::format_string< Args... > fmt, Args &&... args) -> void
以 INFO 级别记录日志
auto sys_sleep(uint64_t ms) -> int
休眠指定毫秒数
auto sys_exit(int code) -> int
退出当前进程或线程
#define EXPECT_GT(val1, val2, msg)
#define EXPECT_EQ(val1, val2, msg)