Код: Выделить всё
#include
//#include
#include
#include
RT_TASK t1, t2, t3, t4, t5, t6, t7, t8, t9;
volatile int counter = 0;
void increment(void *arg) {
for (int i = 0; i < 100000; i++) {
for (volatile int j = 0; j < 10000; j++); // Burn CPU
int local = counter;
local++;
counter = local;
for (volatile int k = 0; k < 100; k++); // More interleaving potential
}
printf("%s done\n", (char *)arg);
}
int main() {
rt_task_create(&t1, "t1", 0, 50, 0);
rt_task_create(&t2, "t2", 0, 50, 0);
rt_task_create(&t3, "t3", 0, 50, 0);
rt_task_create(&t4, "t4", 0, 50, 0);
rt_task_create(&t5, "t5", 0, 50, 0);
rt_task_create(&t6, "t6", 0, 50, 0);
rt_task_create(&t7, "t7", 0, 50, 0);
rt_task_create(&t8, "t8", 0, 50, 0);
rt_task_create(&t9, "t9", 0, 50, 0);
rt_task_start(&t1, &increment, "t1");
rt_task_start(&t2, &increment, "t2");
rt_task_start(&t3, &increment, "t3");
rt_task_start(&t4, &increment, "t4");
rt_task_start(&t5, &increment, "t5");
rt_task_start(&t6, &increment, "t6");
rt_task_start(&t7, &increment, "t7");
rt_task_start(&t8, &increment, "t8");
rt_task_start(&t9, &increment, "t9");
sleep(1);
printf("Final counter: %d (expected 900000)\n", counter);
return 0;
}
< /code>
и я составляю его с помощью:
gcc -O0 -o task2test1 task2test.c $(xeno-config --cflags --ldflags --alchemy)Подробнее здесь: https://stackoverflow.com/questions/796 ... in-xenomai