/*POSIX MUTEX implementationstwo threads takes 2 strings and combined.Two thrads trying to read two strings from the user and combined it.If mutex not used then it may be that second string may be read by other thread.Here, with mutex we are sharing the keyboard effectively.mutex here ensures that which ever thread gets the mutex lock will read the both strings from the user keyboard.*/#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
#include<string.h>
pthread_mutex_t mlock;
pthread_t th1;
void *threadFunc1(void *arg);
int main()
{
char str1[80];
char str2[40];
if(pthread_mutex_init(&mlock,NULL)!=0)
{
printf("Mutext creation failed,\n");
exit(1);
}
pthread_create(&th1,NULL,threadFunc1,NULL);
while(1)
{
pthread_mutex_lock(&mlock);
printf("MAIN THREAD Enter 2 strings:\n");
fgets(str1,40,stdin);
fgets(str2,40,stdin);
strcat(str1,str2);
printf("In main Combined String is:%s\n",str1);
pthread_mutex_unlock(&mlock);
}
return 0;
}
void* threadFunc1(void *arg)
{
char str1[80];
char str2[80];
while(1)
{
pthread_mutex_lock(&mlock);
printf("thread function Enter 2 strings:\n");
fgets(str1,40,stdin);
fgets(str2,40,stdin);
strcat(str1,str2);
printf("In Thread function Combined String is:%s\n",str1);
pthread_mutex_unlock(&mlock);
}
}
/*
MAIN THREAD Enter 2 strings:
aaaa
bbbbb
In main Combined String is:aaaa
bbbbb
MAIN THREAD Enter 2 strings:
ssss sss
dddd
In main Combined String is:ssss sss
dddd
thread function Enter 2 strings:
gggg gggg
fff fff
In Thread function Combined String is:gggg gggg
fff fff
MAIN THREAD Enter 2 strings:
sdfg
hhhhj
In main Combined String is:sdfg
hhhhj
MAIN THREAD Enter 2 strings:
*/
Showing posts with label posix. Show all posts
Showing posts with label posix. Show all posts
POSIX Mutex Implementation C Program in Linux
POSIX Semaphore Implementation Example code in C on Linux
/*POSIX semaphore Implementation for thread synchronization.
Accept string and convert its case. If semaphore is not used chances are there that input of one thread gets converted by other thread and unwanted result.
*/
#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
#include<string.h>
#define MAXMSGLEN 256
sem_t sem1;
char msg1[MAXMSGLEN];
char msg2[MAXMSGLEN];
sem_t sem2;
void* threadFunc1(void *arg);
void toggleCase(char *buf);
int main()
{
pthread_t thread1;
char argmsg1[]="Thread1: ";
int res;
int thNum;
res=sem_init(&sem1,0,0);
res=sem_init(&sem2,0,0);
res=pthread_create(&thread1,NULL,threadFunc1,argmsg1);
while(1)
{
printf("Print message to send:\n");
fgets(msg1,MAXMSGLEN,stdin);
sem_post(&sem1);
/******wait for response****/
sem_wait(&sem2);
printf("Resp message: %s \n",msg2);
}
return 0;
}
void* threadFunc1(void *arg)
{
printf("I am :%s \n",arg);
while(1)
{
sem_wait(&sem1);
strcpy(msg2,msg1);
toggleCase(msg2);
sem_post(&sem2);
}
}
void toggleCase(char *str)
{
while(*str)
{
if(isupper(*str))
*str=tolower(*str);
else if(islower(*str))
*str=toupper(*str);
str++;
}
}
/*
Print message to send:
I am :Thread1:
aaaaa
Resp message: AAAAA
Print message to send:
bbbbb
Resp message: BBBBB
Print message to send:
CCCCC
Resp message: ccccc
Print message to send:
asdfZXCV
Resp message: ASDFzxcv
Print message to send:
WITHOUT sem OP is:
-----------------=-
Print message to send:
I am :Thread1:
qqqqqqqq
Resp message:
Print message to send:
aaaa
Resp message: QQQQQQqq
Print message to send:
ddd
Resp message: AAAa
Print message to send:
aaaa
Resp message: ddd
Print message to send:
---------------------
*/
#include<pthread.h>
#include<semaphore.h>
#include<string.h>
#define MAXMSGLEN 256
sem_t sem1;
char msg1[MAXMSGLEN];
char msg2[MAXMSGLEN];
sem_t sem2;
void* threadFunc1(void *arg);
void toggleCase(char *buf);
int main()
{
pthread_t thread1;
char argmsg1[]="Thread1: ";
int res;
int thNum;
res=sem_init(&sem1,0,0);
res=sem_init(&sem2,0,0);
res=pthread_create(&thread1,NULL,threadFunc1,argmsg1);
while(1)
{
printf("Print message to send:\n");
fgets(msg1,MAXMSGLEN,stdin);
sem_post(&sem1);
/******wait for response****/
sem_wait(&sem2);
printf("Resp message: %s \n",msg2);
}
return 0;
}
void* threadFunc1(void *arg)
{
printf("I am :%s \n",arg);
while(1)
{
sem_wait(&sem1);
strcpy(msg2,msg1);
toggleCase(msg2);
sem_post(&sem2);
}
}
void toggleCase(char *str)
{
while(*str)
{
if(isupper(*str))
*str=tolower(*str);
else if(islower(*str))
*str=toupper(*str);
str++;
}
}
/*
Print message to send:
I am :Thread1:
aaaaa
Resp message: AAAAA
Print message to send:
bbbbb
Resp message: BBBBB
Print message to send:
CCCCC
Resp message: ccccc
Print message to send:
asdfZXCV
Resp message: ASDFzxcv
Print message to send:
WITHOUT sem OP is:
-----------------=-
Print message to send:
I am :Thread1:
qqqqqqqq
Resp message:
Print message to send:
aaaa
Resp message: QQQQQQqq
Print message to send:
ddd
Resp message: AAAa
Print message to send:
aaaa
Resp message: ddd
Print message to send:
---------------------
*/
IPC and Sockets Programs in C in Linux Platform
POSIX Mutex Implementation C Program in Linux
Subscribe to:
Posts (Atom)