之前我们也谈到了线程创建,基本上简单的系统就可以跑起来了,但是还没有到多线程运行的地步。所以,我们下面试图所要做的工作就是创建更多的线程,让更多的线程运行起来。为了做好这一点,首先我们需要对task_init重新修整一下,
void task_init(int index, UINT32 data[], int size, void (*func)()) memset((void*)data, 0, size * sizeof(UINT32)); |
这是一个创建线程的函数,有堆栈、大小、函数入口。那么,我们的函数什么时候创建呢,其实就是在系统的开始位置就可以,
void set_all_task() for(index = 0; index < THREAD_MAX_NUMBER; index ++) |
既然任务创建没有问题,那么下面就会涉及到简单轮转的问题。其实我们的方法特别简单,就是根据current_thread_id叠加,每一个thread都有自己的运转机会。代码如下所示,
void signal_handler(int m) if(0 == quit[current_thread_id]) printf("count = %d in main!\n\n", count ++); |
当然,为了要实现真正的多线程运行,我们还要保证线程始终在运行。要达到这一点也不是很复杂,只需要把子函数设计为while(1)即可,
void hello() printf("id = %i, count = %d in thread!\n",current_thread_id, count ++); |