Hi All
I running one simple semaphore application. I have 2 threads , where one thread is waiting for sem post to happen so I have put sem_wait & other thread is doing sem_post .When I come keeping delay (sleep of 1 sec) I find scheduling is happening properly .But without delay I am finding it strange behaviour i.e. scheduling is not in the proper way as it was when I kept delay of 1 second. I feel sem_wait should have been blocked & the print
"after wait" should only execute when sem post happens I have kept both program as well as output also .
Can anyone tell me why is that so i.e its not scheduling properly .
Or I have done something wrong in application.
Code:
#include <unistd.h> /* Symbolic Constants */
#include <sys/types.h> /* Primitive System Data Types */
#include <errno.h> /* Errors */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include <pthread.h> /* POSIX Threads */
#include <string.h>
#include<semaphore.h>
void *start_routine1();
void *start_routine2();
sem_t flag1;
static int cnt=0;
main()
{
pthread_t tid1;
pthread_t tid2;
int ret;
sem_init(&flag1,1,0);
ret = pthread_create(&tid1,NULL, start_routine1, NULL);
ret = pthread_create(&tid2,NULL, start_routine2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
}
void *start_routine1()
{
while(1)
{
// printf("before wait\n");
sem_wait(&flag1);
printf("after wait\n");
}
}
void *start_routine2()
{
while(1)
{
// printf("before post\n");
sem_post(&flag1);
printf("after post\n");
}
}
Code:
OUTPUT:
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after wait
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post
after post