欢迎来到天天文库
浏览记录
ID:33935111
大小:371.77 KB
页数:5页
时间:2019-02-28
《嵌入式操作系统内核原理和开发(多线程轮转)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处嵌入式操作系统内核原理和开发(多线程轮转)之前我们也谈到了线程创建,基本上简单的系统就可以跑起来了,但是还没有到多线程运行的地步。所以,我们下面试图所要做的工作就是创建更多的线程,让更多的线程运行起来。为了做好这一点,首先我们需要对task_init重新修整一下,[cpp]viewplaincopy1.voidtask_init(intindex,UINT32data[],intsize,void(*func)())2.{3.UINT32unit=size;4.5.memset((void*)da
2、ta,0,size*sizeof(UINT32));6.data[unit-1]=(UINT32)func;7.data[unit-2]=0;8.data[unit-3]=0;9.data[unit-4]=0;10.data[unit-5]=0;11.data[unit-6]=0;12.data[unit-7]=0;13.data[unit-8]=0;14.data[unit-9]=0;15.data[unit-10]=(UINT32)&data[unit-9];16.new[index]=(UINT32)&data[unit-10];17.}这是一个创建线程的函数,有堆栈
3、、大小、函数入口。那么,我们的函数什么时候创建呢,其实就是在系统的开始位置就可以,[cpp]viewplaincopy1.voidset_all_task()2.{3.intindex;4.5.for(index=0;index4、[cpp]viewplaincopy1.voidsignal_handler(intm)本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处2.{3.current_thread_id=current_thread_id%THREAD_MAX_NUMBER;4.5.if(0==quit[current_thread_id])6.{7.swap(&old,&new[current_thread_id]);8.}9.10.printf("count=%dinmain!",5、count++);11.current_thread_id++;12.}当然,为了要实现真正的多线程运行,我们还要保证线程始终在运行。要达到这一点也不是很复杂,只需要把子函数设计为while(1)即可,[cpp]viewplaincopy1.voidhello()2.{3.while(1){4.printf("id=%i,count=%dinthread!",current_thread_id,count++);5.swap(&new[current_thread_id],&old);6.7.printf("id=%i,count=%dinthread!",curr6、ent_thread_id,count++);8.swap(&new[current_thread_id],&old);9.}10.}基本上要做到以上几点就可以实现了,最后给出完整的代码,大家可以在linux系统好好试试这个代码。[cpp]viewplaincopy1.#include2.#include3.#include4.#include5.#include6.#include7.8.#defineUINT32unsignedint9.#defineS7、TACK_LENGTH51210.#defineTHREAD_MAX_NUMBER1011.本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处12.structitimervaloldtv;13.UINT32old=0;14.UINT32count=0;15.UINT32task_stack[THREAD_MAX_NUMBER][STACK_LENGTH]={0};16.UINT32new[THREAD_MAX_N
4、[cpp]viewplaincopy1.voidsignal_handler(intm)本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处2.{3.current_thread_id=current_thread_id%THREAD_MAX_NUMBER;4.5.if(0==quit[current_thread_id])6.{7.swap(&old,&new[current_thread_id]);8.}9.10.printf("count=%dinmain!",
5、count++);11.current_thread_id++;12.}当然,为了要实现真正的多线程运行,我们还要保证线程始终在运行。要达到这一点也不是很复杂,只需要把子函数设计为while(1)即可,[cpp]viewplaincopy1.voidhello()2.{3.while(1){4.printf("id=%i,count=%dinthread!",current_thread_id,count++);5.swap(&new[current_thread_id],&old);6.7.printf("id=%i,count=%dinthread!",curr
6、ent_thread_id,count++);8.swap(&new[current_thread_id],&old);9.}10.}基本上要做到以上几点就可以实现了,最后给出完整的代码,大家可以在linux系统好好试试这个代码。[cpp]viewplaincopy1.#include2.#include3.#include4.#include5.#include6.#include7.8.#defineUINT32unsignedint9.#defineS
7、TACK_LENGTH51210.#defineTHREAD_MAX_NUMBER1011.本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处12.structitimervaloldtv;13.UINT32old=0;14.UINT32count=0;15.UINT32task_stack[THREAD_MAX_NUMBER][STACK_LENGTH]={0};16.UINT32new[THREAD_MAX_N
此文档下载收益归作者所有