Anonymous
Как наблюдать за расой в Ксеномае?
Сообщение
Anonymous » 26 май 2025, 11:07
У меня была довольно забавная задача для моего университета. Кто -нибудь сейчас, как просто наблюдать за расой? Я попробовал много тем и дополнительного петли для некоторой утечки, но без успеха. Вот мой простой код: < /p>
Код: Выделить всё
#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
1748246828
Anonymous
У меня была довольно забавная задача для моего университета. Кто -нибудь сейчас, как просто наблюдать за расой? Я попробовал много тем и дополнительного петли для некоторой утечки, но без успеха. Вот мой простой код: < /p> [code]#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)[/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79638480/how-to-observe-race-condition-in-xenomai[/url]