Posix threads

Hi,
consider the code below:

#include <stdio.h>
      .
      .

struct myStruct
{  
   char *message ;
   int id;
 };
     .    
     .
     .
void *thread_function( void *ptr );
nt main()
{
     pthread_t thread1, thread2 ,thread3 ;
     struct myStruct nico1;
     struct myStruct nico2;
     struct myStruct nico3;
     nico1.message="Thread1";
     nico1.id=0;
     nico2.message="Thread 2";
     nico2.id=1;
     nico3.message="Thread 3";
     nico3.id=2;
     int  iret1, iret2,iret3;
 
     iret1 = pthread_create( &thread1, NULL, thread_function, (void*)&nico1);
     iret2 = pthread_create( &thread2, NULL, thread_function, (void*)&nico2 );
     iret3= pthread_create( &thread3, NULL, thread_function, (void*)&nico3);
       .
       .
       .
     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL);
     pthread_join( thread3, NULL); 
     
     exit(0);
}


void *thread_function( void *ptr )
{
    int k,j;
    struct myStruct *nico;
         nico=( struct myStruct*)ptr;
    k=1;
    while(k<10)
    {
        printf(" THREAD # %d \n", nico->id);
        printf("****************** \n ******************");
        printf("                    \n ");
        printf("in loop while k=%d : \n ",k);
        printf("                    \n ");
        printf("                    \n ");
        
        
        //then for j=1,...,k-1
                for(j=(nico->id); j<k; j+=3)  //Start at 0 for C
                {
            
            
            printf(" in loop for j=%d : \n ",j);
            printf("                    \n ");
    
                }
        
        
        k=k+1;
    }
 return NULL;
}

so I expected that theses three threads execute in parallel,and therfore in
I expected to have mixed displays of threads in terminal .but after the execution I have a regular display of threads,i.e. thread 1 prints all its
while loop(from 1 to 9),after thread 2 ,and after thread3 it seems that there
is no parallel execution of these threads,I try to increase the number
of iteration of loop while to 100 but nothing changes.
Any thoughts?
(I am using a multiprocessor machine and Kubuntu)

here is example of the execution:

THREAD # 0
******************
******************
in loop while k=1 :

in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=2 :

in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=3 :

in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=4 :

in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=5 :

in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=6 :

in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=7 :

in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 0
******************
******************
in loop while k=8 :

in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 0
******************
******************
in loop while k=9 :

in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 1
******************
******************
in loop while k=1 :

THREAD # 1
******************
******************
in loop while k=2 :

in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=3 :

in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=4 :

in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=5 :

in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=6 :

in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=7 :

in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=8 :

in loop for j=1 :

in loop for j=4 :

in loop for j=7 :

THREAD # 1
******************
******************
in loop while k=9 :

in loop for j=1 :

in loop for j=4 :

in loop for j=7 :

THREAD # 2
******************
******************
in loop while k=1 :

THREAD # 2
******************
******************
in loop while k=2 :

THREAD # 2
******************
******************
in loop while k=3 :

in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=4 :

in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=5 :

in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=6 :

in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=7 :

in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=8 :

in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=9 :

in loop for j=2 :

in loop for j=5 :

in loop for j=8 :

Thanks,
B.

First, please put tags (sans the space) around your listing, it's easier on the eyes. And since we're on the subject, could you shorten your output?

Second: Your thread has to run 8 printf()s, which translates to about 25 system instructions, times 10 = 250 instructions. Given that even a P90 from the last century can do roughly 90000000 instructions per second, your code is done long before the kernel has any reason to preempt it.

You need to create your threads as joinable i.e.

pthread_attr_t attr;
....
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
....
pthread_create( &thread1, &attr, thread_function, (void*)&nico1);
....