Wednesday, November 02, 2005

Multithreading

/* An attempt at multithreading using POSIX threads library. */
/* Pretty much useless */
/* Compile with gcc filename.c -lpthread */

#include <stdio.h&rt;
#include <pthread.h&rt;

int val=0;
int exited=0;

/* Takes input and displays the value of val. */
void *input_thread(void *ptr) {
  char ch='d';
  while(ch!='q') {
    scanf("%c",&ch);
    switch(ch) {
    case 'd':
      printf("Val:%d\n",val);
      break;
    case 'q':
      break;
    }
  }
  exited=1;   /* Should be kept under lock, but is not. */
}
/* Keeps on incrementing val */
void *compute_thread(void *ptr) {
  while(!exited) 
    val=(val+1)%0xffff;  /* Keep it low. This again should have been under lock. */
}
int main() {
  pthread_t i_thread,c_thread;
  pthread_create(&i_thread,NULL,input_thread,(void *)0);
  pthread_create(&c_thread,NULL,compute_thread,(void *)0);
  /* Wait for both threads to exit before exiting main */
  pthread_join(i_thread,NULL);
  pthread_join(c_thread,NULL);
  return 0;
}

No comments: