Ich schreibe einen Code für ein Linux-Kernelmodul und erlebe ein seltsames Verhalten darin. Hier ist mein Code:
int data = 0;
void threadfn1()
{
int j;
for( j = 0; j < 10; j++ )
printk(KERN_INFO "ICH BIN THREAD 1 %d\n",j);
data++;
}
void threadfn2()
{
int j;
for( j = 0; j < 10; j++ )
printk(KERN_INFO "ICH BIN THREAD 2 %d\n",j);
data++;
}
static int __init abc_init(void)
{
struct task_struct *t1 = kthread_run(threadfn1, NULL, "thread1");
struct task_struct *t2 = kthread_run(threadfn2, NULL, "thread2");
while( 1 )
{
printk("debug\n"); // läuft okay
if( data >= 2 )
{
kthread_stop(t1);
kthread_stop(t2);
break;
}
}
printk(KERN_INFO "HELLO WORLD\n");
}
Grundsätzlich habe ich versucht zu warten, bis die Threads fertig sind, und dann etwas zu drucken. Der obige Code erreicht dieses Ziel, aber MIT "printk("debug\n");"
nicht auskommentiert. Sobald ich printk("debug\n");
auskommentiere, um den Code ohne Debugging auszuführen und das Modul durch den insmod-Befehl zu laden, hängt das Modul fest und es scheint, als ob es sich in Rekursion verläuft. Ich weiß nicht, warum printk meinen Code so stark beeinflusst?
Jede Hilfe wäre geschätzt.
Mit freundlichen Grüßen.