On 9/21/05, Fawad Lateef <fawadlateef@xxxxxxxxx> wrote: > On 9/21/05, raja <vnagaraju@xxxxxxxxxxxx> wrote: > > Hi, > > I am trying to trace the race condition by creating 2 threads in > > kernel space. One thread incriments a global value and other > > decrements that value. > > But I am unable to trace the race condition. > > I am listing my code.Will you please help me. > > > > > > static int __init init_module_atomic(void); > > static void __exit exit_module_atomic(void); > > > > No need for the above declaration .......... > > > int value=0; > > Can change this to unsigned long value ......... > > > > > int thread_function_1(void * data) > > { > > printk("Entered into Thread 1\n"); > > int i; > > for(i=0;i<1000;i++) > > { > > Can change this loop to for( ; ; ) to get the result more properly > > > udelay(1000); > > Change this to schedule(); > > > value++; > > printk("Value Is : %d\t",value); > > } > > printk("Exited From Thread 1\n"); > > return 0; > > } > > > > int thread_function_2(void * data) > > { > > printk("Entered into Thread 2\n"); > > int i; > > for(i=0;i<1000;i++) > > { > > Change to for ( ; ; ) > > > udelay(100); > > change to schedule() > > > value--; > > printk("Value Is : %d\t",value); > > } > > printk("Exited From Thread 2\n"); > > return 0; > > } > > > > In your code you won't be able to see just as your thread_1 terminates > quickly before starting thread_2 and udelay is stalling the whole CPU > and won't allow CPU to do other stuffs, so changing it to schedule() > will give you better result ........... > And also do kill/send signals to your thread for killing ........ so that it wont result in seg-fault if you remove your module ........ for the case mentioned above by me ..... -- Fawad Lateef -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/