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