Professional Documents
Culture Documents
(8103472)
B3
Lab 5 and 6
Q1.1
#include <stdio.h>
#include <pthread.h>
int main()
pthread_t tid,tid1;
pthread_attr_t a,a1;
void *p1="thread1";
void *p2="thread2";
pthread_attr_init(&a);
pthread_create(&tid,&a,run,p1);
pthread_attr_init(&a1);
pthread_create(&tid1,&a1,run,p2);
pthread_join(tid,NULL);
pthread_join(tid1,NULL);
pthread_exit(0);
{char *p1=p;
int i;
for(i=1;i<=20;i++)
printf("%d->%s\n",i,p1);
pthread_exit(0);
Q1.2
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
pthread_attr_init(&a3);
pthread_create(&tid3,&a3,run,p3);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_exit(0);
}
void *run(void *p)
{
int n=p;
if(n==1)
{
printf("Thread->1\n");
system("ls");
}
if(n==2)
{
printf("Thread->2\n");
system("pwd");
}
if(n==3)
{
printf("Thread->3\n");
system("kill 1232");
}
pthread_exit(0);
}
Q2
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
int counter=0;
void *run(void *p);
int main()
{
pthread_t tid1,tid2,tid3;
pthread_attr_t a1,a2,a3;
void *p1=5,*p2=10,*p3=20;
pthread_attr_init(&a1);
pthread_create(&tid1,&a1,run,p1);
pthread_attr_init(&a2);
pthread_create(&tid2,&a2,run,p2);
pthread_attr_init(&a3);
pthread_create(&tid3,&a3,run,p3);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_exit(0);
}
void *run(void *p)
{
int i=p;
counter=counter+i;
printf("%d\n",counter);
pthread_exit(0);
}
Q3
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
int account1=0,account2=0;
void *run();
int main()
{
pthread_t tid0,tid1;
pthread_attr_t a1,a2;
int sum=account1+account2;
int i=0;
while(sum==0)
{i++;
pthread_attr_init(&a1);
pthread_create(&tid0,NULL,run,NULL);
pthread_attr_init(&a2);
pthread_create(&tid1,NULL,run,NULL);
pthread_join(tid0,NULL);
pthread_join(tid1,NULL);
sum=account1+account2;
}
printf("Number of iteration for race arround:- %d\n",i);
printf("SUM OF ACCOUNTS AFTER THREAD EXECUTION:- %d\n",(account1+account2));
pthread_exit(0);
}
void *run()
{
int num=5;
account1=account1+5;
account2=account2-5;
printf("SUM OF BOTH ACCOUNTS:- %d\n",(account1+account2));
pthread_exit(0);
}
Q4.1
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t mutex;
void *run(void *p);
int main()
{
pthread_t tid,tid1;
void *p1="thread1";
void *p2="thread2";
sem_init(&mutex,0,1);
pthread_create(&tid,NULL,run,p1);
pthread_create(&tid1,NULL,run,p2);
pthread_join(tid,NULL);
pthread_join(tid1,NULL);
pthread_exit(0);
}
void *run(void *p)
{char *p1=p;
int i;
sem_wait(&mutex);
for(i=1;i<=20;i++)
printf("%d->%s\n",i,p1);
sem_post(&mutex);
pthread_exit(0);
}
Q4.2
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <semaphore.h>
sem_t mutex;
void *run(void *p);
int main()
{
pthread_t tid1,tid2,tid3;
void *p1=1,*p2=2,*p3=3;
sem_init(&mutex,0,1);
pthread_create(&tid1,NULL,run,p1);
pthread_create(&tid2,NULL,run,p2);
pthread_create(&tid3,NULL,run,p3);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_exit(0);
}
void *run(void *p)
{
int n=p;
sem_wait(&mutex);
if(n==1)
{
printf("Thread->1\n");
system("ls");
}
if(n==2)
{
printf("Thread->2\n");
system("pwd");
}
if(n==3)
{
printf("Thread->3\n");
system("kill 1232");
}
sem_post(&mutex);
pthread_exit(0);
}