Skip to main content

Write a program of greeting using pthread in C programming


#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>

#define MAX_THREAD 1000

typedef struct
{
 int id;
 int nproc;
}parm;

char message[100]; /* storage for message  */
pthread_mutex_t msg_mutex = PTHREAD_MUTEX_INITIALIZER;
int token = 0;

void* greeting(void *arg)
{
 parm *p = (parm *) arg;
 int id = p->id;
 int i;

 if (id != 0)
 {
  /* Create message */
  while (1)
  {
   pthread_mutex_lock(&msg_mutex);
   if (token  == 0)
   {
    sprintf(message, "Greetings from process %d!", id);
    token++;
    pthread_mutex_unlock(&msg_mutex);
    break;
   }
   pthread_mutex_unlock(&msg_mutex);
   sleep(1);
  }
  /* Use strlen+1 so that '\0' gets transmitted */
 } 
 else
 {    /* my_rank == 0 */
  for (i = 1; i < p->nproc; i++)
  {
   while (1)
   {
    pthread_mutex_lock(&msg_mutex);
    if (token == 1)
    {
     printf("%s\n", message);
     token--;
     pthread_mutex_unlock(&msg_mutex);
     break;
    }
    pthread_mutex_unlock(&msg_mutex);
    sleep(1);
   }
  }
 }

 return NULL;
}

int main(int argc, char *argv[])
{
 int my_rank; /* rank of process      */
 int dest;  /* rank of receiver     */
 int tag = 0; /* tag for messages     */

 pthread_t      *threads;
 pthread_attr_t  pthread_custom_attr;
 parm           *p;

 int n, i;

 if (argc != 2)
 {
  printf("Usage: %s n\n  where n is no. of thread\n", argv[0]);
  exit(1);
 }
 n = atoi(argv[1]);

 if ((n < 1) || (n > MAX_THREAD))
 {
  printf("The no of thread should between 1 and %d.\n", MAX_THREAD);
  exit(1);
 }
 threads = (pthread_t *) malloc(n * sizeof(*threads));
 pthread_attr_init(&pthread_custom_attr);

 p=(parm *)malloc(sizeof(parm)*n);
 /* Start up thread */

 for (i = 0; i < n; i++)
 {
  p[i].id = i;
  p[i].nproc = n;
  pthread_create(&threads[i], &pthread_custom_attr, greeting, (void *)(p+i));
 }
 /* Synchronize the completion of each thread. */

 for (i = 0; i < n; i++)
 {
  pthread_join(threads[i], NULL);
 }
 free(p);
} 

OUTPUT



gcc -o pthread_greeting pthread_greeting.c -lpthread
./pthread_greeting 10

Greetings from process 1!
Greetings from process 7!
Greetings from process 4!
Greetings from process 3!
Greetings from process 2!
Greetings from process 5!
Greetings from process 6!
Greetings from process 9!
Greetings from process 8!

Comments

Popular posts from this blog

MVT (Multiprogramming Variable Task) in C Programming

#include #include void main() { int i,os_m,nPage,total,pg[25]; clrscr(); printf("\nEnter total memory size:"); scanf("%d",&total); printf("\nEnter memory for OS:"); scanf("%d",&os_m); printf("\nEnter no. of pages:"); scanf("%d",&nPage); for(i=0;i =pg[i]) { printf("\n Allocate page %d",i+1); total=total-pg[i]; } else printf("\n page %d is not allocated due to insufficient memory.",i+1); } printf("\n External Fragmentation is:%d",total); getch(); } OUTPUT Enter total memory size:1024 Enter memory for OS:256 Enter no. of pages:4 Enter size of page[1]:128 Enter size of page[2]:512 Enter size of page[3]:64 Enter size of page[4]:512 Allocate page 1 Allocate page 2 Allocate page 3 page 4 is not allocated due to insufficient memory. External Fragmentation is:64

First Come First Serve (FCFS) Page replacement algorithm in C Programming

#include #include int fsize; int frm[15]; void display(); void main() { int pg[100],nPage,i,j,pf=0,top=-1,temp,flag=0; clrscr(); printf("\n Enter frame size:"); scanf("%d",&fsize); printf("\n Enter number of pages:"); scanf("%d",&nPage); for(i=0;i OUTPUT Enter frame size:3 Enter number of pages:12 Enter page[1]:1 Enter page[2]:2 Enter page[3]:3 Enter page[4]:4 Enter page[5]:1 Enter page[6]:2 Enter page[7]:5 Enter page[8]:1 Enter page[9]:2 Enter page[10]:3 Enter page[11]:4 Enter page[12]:5 page | Frame content -------------------------------------- 1 | 1 -1 -1 2 | 1 2 -1 3 | 1 2 3 4 | 4 2 3 1 | 4 1 3 2 | 4 1 2 5 | 5 1 2 1 | 5 1 2 2 | 5 1 2 3 | 5 3 2 4 | 5 3 4 5 | 5 3 4 ---------------------------...

Deadlock Prevention using Banker’s Algorithm in C Programming

#include #include void main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; clrscr(); printf("\n Enter number of process:"); scanf("%d",&pno); printf("\n Enter number of resources:"); scanf("%d",&rno); for(i=1;i OUTPUT Enter number of process:5 Enter number of resources:3 Enter total numbers of each resources:10 5 7 Enter Max resources for each process: for process 1:7 5 3 for process 2:3 2 2 for process 3:9 0 2 for process 4:2 2 2 for process 5:4 3 3 Enter allocated resources for each process: for process 1:0 1 0 for process 2:3 0 2 for process 3:3 0 2 for process 4:2 1 1 for process 5:0 0 2 available resources: 2 3 0 Allocated matrix Max need 0 1 0| 7 5 3| 7 4 3 3 0 2| 3 2 2| 0 2 0 3 0 2| 9 0 2| 6 0 0 2 1 1| ...