Home
Source Codes
Engineering Colleges

Training  Reports
Seminar Reports
Placement Papers

Forums

   Computer Science / IT
   Electronics
   Electrical
   Mechanical
   Chemical
   Civil

   CAT / MBA

   GMAT / Foreign MBA
Latest Jobs

Engineering Jobs / Technical Jobs
Management Jobs

Sitemap
Terms of use

Displaying  Source Code(s)  
 

 
Program to work on Semapores.

--------------------------------------------------------------------------------



/* Program to work on Semapores */

# include < unistd.h>
# include < stdlib.h>
# include < stdio.h>
# include < sys/types.h>
# include < sys/ipc.h>
# include < sys/sem.h>
#ifndef _SEMUN_H
#define _SEMUN_H
union semun{
int val;
struct semid_ds * buf;
unsigned short int * array;
struct seminfo *__buf;
};
# endif

static int set_semvalue(void);
static void del_semvalue(void);
static int semaphore_p(void);
static int semaphore_v(void);
static int sem_id;

int main(int argc, char *argv[])
{ int i;
int pause_time;
char op_char = 'O';
srand((unsigned int) getpid());
sem_id = semget((key_t)1234,1,0666| IPC_CREAT);
if ( argc > 1 )
{
if (!set_semvalue())
{
fprintf(stderr, "Failed to initialize semapore <BR>);
exit(EXIT_FAILURE);
}
op_char = 'X';
sleep(2);
}

for ( i=0; i<10;i++)
{
if (!semaphore_p()) exit(EXIT_FAILURE);
printf("%c", op_char);fflush(stdout);
pause_time = rand() % 3;
sleep(pause_time);
printf("%c", op_char);fflush(stdout);
if (!semaphore_p()) exit(EXIT_FAILURE);
pause_time = rand() % 2;
sleep(pause_time);
}
printf("
%d - finished <BR>, getpid());
if (argc >1 )
{
sleep(10);
del_semvalue();
}
exit(EXIT_SUCCESS);
}

static int set_semvalue(void)
{
union semun sem_union;
sem_union.val = 1;
if (semctl(sem_id,0,SETVAL, sem_union) == -1) return(0);
return(1);
}

static void del_semvalue(void)
{
union semun sem_union;
if (semctl(sem_id,0, IPC_RMID, sem_union) == -1)
fprintf(stderr, "Failed to delete semaphore <BR>);
}

static int semaphore_p(void)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1;
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b,1) == -1)
{
fprintf(stderr, "semaphore_p failed
");
return(0);
}
return(1);
}

 

 

 

Contribute content or training reports / feedback / Comments
job placement papers
All rights reserved © copyright 123ENG