#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int myglobal;

int do_work(void)
{
        int i, sum;

        sum = 0;
        for (i = 0; i < 100000; i++) sum = sum + i;
        return sum;
}

void *thread_function(void *arg) 
{
        int i,j;

        for (i=0; i < 1000; i++) {
                j = myglobal;
                j = j + 1;
                do_work();
                myglobal = j;
                do_work();
        }
        return NULL;
}

int main(void) 
{
        pthread_t mythread;
        int i;
        
        myglobal = 0;

        if ( pthread_create( &mythread, NULL, thread_function, NULL) ) {
                printf("error creating thread.");
                abort();
        }

        for ( i=0; i < 1000; i++) {
                myglobal = myglobal + 1;
                do_work();
        }

        if ( pthread_join ( mythread, NULL ) ) {
                printf("error joining thread.");
                abort();
        }

        printf("myglobal equals %d\n",myglobal);

        exit(0);
}