Hi,
This is my first post here.
I would like to know the operation of mutex, so i wrote a program with two threads and each access the same global variable, hence require the mutex.
I actually like to simulate the below behaviour.
Thread1 locks the mutex.
Thread2 try to lock the mutex and fails.
i have tried in some different ways but never i got to see the behaviour what i mentioned.
i tried keeping sleep(5) in each thread , all it is doing is wait till the thread terminates and continue with the rest.
what i expect is when some thread is sleeping other will get a chance to execute, but its not happening here.
can somebody please guide me how to simulate the behaviour i wanted.
NP: one more thing is there is no difference in the out put even if i remove the mutex control.
Thanks in Advance.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
void *fun1(void* );
void *fun2(void* );
int arg = 20;
int main( void ) {
pthread_t tid1,tid2;
pthread_attr_t attr;
pthread_attr_init(&attr);
printf(" arg = %d\n", arg);
pthread_create(&tid1, NULL, fun1,(void*)1);
pthread_join(tid1,NULL);
printf(" 1arg = %d\n", arg);
pthread_create(&tid2, NULL, fun2,(void*)2);
pthread_join(tid2,NULL);
printf(" 2arg = %d\n", arg);
printf("end\n");
pthread_exit(NULL);
return 0;
}
void * fun1( void *p)
{
int i;
printf(" thrd %ld schded \n",(long) p);
if ( -1 != pthread_mutex_lock(&mutex))
if (arg == 20)
arg = 10;
} else {
printf(" Failed to acquire mutex in 1\n");
}
//sleep(10);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void* fun2( void *p)
{
printf(" thrd %ld schded \n",(long) p);
if ( -1 != pthread_mutex_lock(&mutex)) {
if (arg == 10)
arg = 30;
}else {
printf(" Failed to acquire mutex in 2\n");
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}