最简单的操作系统
#include int main() { while(1) { ; } return 0; } |
实现一个程序
#include #include //计算y=3×2+7abx+c const const const int main() { bool isTask_1_Living = 1;//任务标志位 unsigned unsigned while(1) { if(isTask_1_Living) { x = rand(); y = 3; y *= x; y *= x; z = 7; z *= a; z *= b; z *= x; y += z; y += c; isTask_1_Living = 0; printf(“%d”, y); } } return 0; } |
把任务分成多个线程
#include #include //计算y=3×2+7abx+c const const const int main() { bool isTask_1_Living = 1;//任务标志位 unsigned unsigned unsigned while(1) { if(isTask_1_Living) { switch (Task1_Thread_Progress) { case 0: x = rand(); y = 3; break; case 1: y *= x; y *= x; break; case 2: z = 7; z *= a; break; case 3: z *= b; z *= x; break; case 4: y += z; y += c; isTask_1_Living = 0; printf(“%d”, y); break; } Task1_Thread_Progress++; if(Task1_Thread_Progress>4) { Task1_Thread_Progress = 0; } } } return 0; } |
多任务
#include #include //计算y1=3×12+7a1b1x+c1 //计算y2=3×22+7a2b2x+c2 const const const const const const int main() { bool isTask_1_Living = 1;//任务1标志位 unsigned bool isTask_2_Living = 1;//任务2标志位 unsigned unsigned unsigned unsigned unsigned while(1) { if(isTask_1_Living) { switch (Task1_Thread_Progress) { case 0: x1 = 1;// rand(); y1 = 3; break; case 1: y1 *= x1; y1 *= x1; break; case 2: z1 = 7; z1 *= a1; break; case 3: z1 *= b1; z1 *= x1; break; case 4: y1 += z1; y1 += c1; isTask_1_Living = 0; printf(“%d\n”, y1); break; } Task1_Thread_Progress++; if(Task1_Thread_Progress>4) { Task1_Thread_Progress = 0; } } if (isTask_2_Living) { switch (Task2_Thread_Progress) { case 0: x2 = 1;// rand(); y2 = 3; break; case 1: y2 *= x2; y2 *= x2; break; case 2: z2 = 7; z2 *= a2; break; case 3: z2 *= b2; z2 *= x2; break; case 4: y2 += z2; y2 += c2; isTask_2_Living = 0; printf(“%d\n”, y2); break; } Task2_Thread_Progress++; if (Task2_Thread_Progress>4) { Task2_Thread_Progress = 0; } } } return 0; } |
数据代码分离
#include #include //计算y1=3×12+7a1b1x+c1 //计算y2=3×22+7a2b2x+c2 struct { unsigned unsigned unsigned }; struct { unsigned unsigned unsigned }; struct { _coefficient CO; _variable V; }; //线程常量定义 #define #define char myThread(myTask* Task,unsigned { char ret = 0; switch (*Process) { case 0: (*Task).V.x = 1;// rand(); (*Task).V.y = 3; break; case 1: (*Task).V.y *= (*Task).V.x; (*Task).V.y *= (*Task).V.x; break; case 2: (*Task).V.z = 7; (*Task).V.z *= (*Task).CO.a; break; case 3: (*Task).V.z *= (*Task).CO.b; (*Task).V.z *= (*Task).V.x; break; case 4: (*Task).V.y += (*Task).V.z; (*Task).V.y += (*Task).CO.c; printf(“%d\n”, (*Task).V.y); break; } (*Process)++; if (*Process>4) { ret = -1;//线程结束 *Process = 0; } return ret; } //定义任务 myTask Task1, Task2; void InitTask(myTask *Task,unsigned { (*Task).CO.a = a1; (*Task).CO.b = b1; (*Task).CO.c = c1; } int main() { bool isTask_1_Living = 1;//任务1标志位 unsigned bool isTask_2_Living = 1;//任务2标志位 unsigned InitTask(&Task1, 9, 7, 18); InitTask(&Task2, 4, 13, 16); //printf(“%d\n”,Task1.CO.a); while(1) { if(isTask_1_Living) { isTask_1_Living = !myThread(&Task1,&Task1_Thread_Progress); } if (isTask_2_Living) { isTask_2_Living = !myThread(&Task2, &Task2_Thread_Progress); } } return 0; } |
线程的另一种生死
#include #include //计算y1=3×12+7a1b1x+c1 //计算y2=3×22+7a2b2x+c2 //计算y3=3×32+7a3b3x+c3 struct { unsigned unsigned unsigned }; struct { unsigned unsigned unsigned }; struct { _coefficient CO; _variable V; }; //线程常量定义 #define #define char myThread(myTask* Task,unsigned { char ret = 0; switch (*Process) { case 0: (*Task).V.x = 1;// rand(); (*Task).V.y = 3; break; case 1: (*Task).V.y *= (*Task).V.x; (*Task).V.y *= (*Task).V.x; break; case 2: (*Task).V.z = 7; (*Task).V.z *= (*Task).CO.a; break; case 3: (*Task).V.z *= (*Task).CO.b; (*Task).V.z *= (*Task).V.x; break; case 4: (*Task).V.y += (*Task).V.z; (*Task).V.y += (*Task).CO.c; printf(“%d\n”, (*Task).V.y); break; } (*Process)++; if (*Process>4) { ret = -1;//线程结束 *Process = 0; } return ret; } //定义任务 myTask Task1, Task2, Task3; void InitTask(myTask *Task,unsigned { (*Task).CO.a = a1; (*Task).CO.b = b1; (*Task).CO.c = c1; } int main() { bool isTask_1_Living = 1;//任务1标志位 unsigned bool isTask_2_Living = 1;//任务2标志位 unsigned unsigned isTask_3_Living = 5;//任务3标志位 unsigned InitTask(&Task1, 9, 7, 18); InitTask(&Task2, 4, 13, 16); InitTask(&Task3, 2, 24, 3); //printf(“%d\n”,Task1.CO.a); while(1) { if(isTask_1_Living) { isTask_1_Living = !myThread(&Task1,&Task1_Thread_Progress); } if (isTask_2_Living) { isTask_2_Living = !myThread(&Task2, &Task2_Thread_Progress); } if (isTask_3_Living)//程序会执行五次 { isTask_3_Living +=myThread(&Task3, &Task3_Thread_Progress); } } return 0; } |