@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().
>>
>> --
>>
>>
>>
>
>  --
>
>
>

-- 


Reply via email to