I am using semaphores and have initialised semaphores called PM_Full and PM_Empty like: sem_t PM_Empty[MAX_NOOF_BUFFERS]; sem_t PM_Full[MAX_NOOF_BUFFERS]; and for(i = 0; i < MAX_NOOF_BUFFERS; i++) { sem_init(&PM_Empty, 0, 1); //will be shared bet. threads,but cannot be shared bet. processes /*PM Buffers as empty*/ sem_init(&PM_Full, 0, 0); Desc_Buffer = NULL; Valid_Data = 0; } Also we have initialised: short int siBuffer_Select = 0; And after few value changes finally we have: sem_wait(&PM_Empty[siBuffer_Select]); /*check for the next buffer is empty or not*/ (here the value of siBuffer_Select is 0) But this statement does not work, and the code hangs here giving a "segmentation fault" without any description. Kindly suggest what might be causing the error. Thanks.