Thanks all for the response. I thought of constructing a conditional wait using semaphores as follows: //global flag = 0.
void *text(void *arg) { int n = *(int*)arg; while(flag != n) { sem_wait(&mutex); internal_flag = 1; } if(internal_flag) sem_post(&mutex); ..................................... //We can take a lock on this also. flag++; pthread_exit(0); } //Rest of the code for On Mon, Nov 26, 2012 at 10:08 AM, Sachin Maheshwari < sachin.maheshw...@gmail.com> wrote: > Hi Jagannath, > pthread_join function call will suspend the execution of the current > thread till the new thread (whose id you provide to this function) has > completed. > > So in your example when you say pthread_join(tid[i],NULL), the current > thread (ie the main thread) will remain suspended till thread created by > you in the previous line pthread_create (with thread id tid[i]) completes. > > Regards, > Sachin > > > On Mon, Nov 26, 2012 at 9:46 AM, Jagannath Prasad Das <jpdasi...@gmail.com > > wrote: > >> @Naveen: I didn't understand your point . Can you please throw more light >> on join operation >> >> On Sun, Nov 25, 2012 at 10:47 PM, vIGNESH v <v.v.07121...@gmail.com>wrote: >> >>> You can use mutex instead of semaphores if you need to execute only one >>> case at a time. >>> >>> FROM, >>> >>> V.VIGNESH. >>> M.Sc Theoretical Computer Science. >>> PSG College of Technology >>> >>> >>> >>> On 25 November 2012 22:37, jagannath <jpdasi...@gmail.com> wrote: >>> >>>> Folks, I have one pthread question.I know that its not the right place >>>> but i thought this is the right place to post this. Code snippet: >>>> #include <stdlib.h> >>>> #include <stdio.h> >>>> >>>> #include <unistd.h> /* defines _POSIX_THREADS if pthreads are available >>>> */ >>>> #ifdef _POSIX_THREADS >>>> # include <pthread.h> >>>> #endif >>>> >>>> #include <semaphore.h> >>>> >>>> void *text(void *arg); >>>> >>>> int code[] = { 4, 6, 3, 1, 5, 0, 2 }; >>>> >>>> int main() >>>> { >>>> int i; >>>> pthread_t tid[7]; >>>> >>>> for (i = 0; i < 7; i++) >>>> { >>>> pthread_create(&tid[i], NULL, text, (void*)&code[i]); >>>> pthread_join(tid[i],NULL); >>>> } >>>> >>>> return 0; >>>> } >>>> >>>> void *text(void *arg) >>>> { >>>> int n = *(int*)arg; >>>> >>>> switch (n) >>>> { >>>> case 0: >>>> printf("A semaphore S is an integer-valued variable which can take only >>>> non-negative\n"); >>>> printf("values. Exactly two operations are defined on a >>>> semaphore:\n\n"); >>>> break; >>>> >>>> case 1: >>>> printf("Signal(S): If there are processes that have been suspended on >>>> this semaphore,\n"); >>>> printf(" wake one of them, else S := S+1.\n\n"); >>>> break; >>>> >>>> case 2: >>>> printf("Wait(S): If S>0 then S:=S-1, else suspend the execution of this >>>> process.\n"); >>>> printf(" The process is said to be suspended on the semaphore S.\n\n"); >>>> break; >>>> >>>> case 3: >>>> printf("The semaphore has the following properties:\n\n"); >>>> break; >>>> >>>> case 4: >>>> printf("1. Signal(S) and Wait(S) are atomic instructions. In >>>> particular, no\n"); >>>> printf(" instructions can be interleaved between the test that S>0 and >>>> the\n"); >>>> printf(" decrement of S or the suspension of the calling >>>> process.\n\n"); >>>> break; >>>> >>>> case 5: >>>> printf("2. A semaphore must be given an non-negative initial >>>> value.\n\n"); >>>> break; >>>> >>>> case 6: >>>> printf("3. The Signal(S) operation must waken one of the suspended >>>> processes. The\n"); >>>> printf(" definition does not specify which process will be >>>> awakened.\n\n"); >>>> break; >>>> } >>>> >>>> pthread_exit(0); >>>> } >>>> >>>> The threads are not synchronized and therefore the text output is >>>> garbled. How to add semaphores of POSIX to this program to synchronize the >>>> threads.? >>>> >>>> primitives to rejig your memory: >>>> >>>> sem_init(), sem_wait(),sem_post(),sem_destroy(). >>>> >>>> -- >>>> >>>> >>>> >>> >>> -- >>> >>> >>> >> >> -- >> >> >> > > > > -- > Regards, > Sachin Maheshwari > Cell phone: +91.7259917298 > > "If we admit that human life can be ruled by reason; the possibility of > life is destroyed." - Alexander Supertramp > > -- > > > --