Beispiel #1
0
void *Producer(void *arg)
{
    int i, item, index;

    index = (intptr_t) arg;

    for (i=0; i < NITERS; i++) {

        /* Produce item */
        item = i;	

        /* Prepare to write item to buf */

        /* If there are no empty slots, wait */
        sem_acq(shared.empty);
        /* If another thread uses the buffer, wait */
        sem_acq(shared.mutex);
        shared.buf[shared.in] = item;
        shared.in = (shared.in+1)%BUFF_SIZE;
        printf("[P%d] Producing %d ...\n", index, item); fflush(stdout);
        /* Release the buffer */
        sem_rel(shared.mutex);
        /* Increment the number of full slots */
        sem_rel(shared.full);

        /* Interleave  producer and consumer execution */
        if (i % 2 == 1) sleep(1);
    }
    return NULL;
}
Beispiel #2
0
int consumer()
{
     while(1)
     {
       //sleep(5);
          sem_acq(full);
          sem_acq(mutex);
          out = (out+1)%n;
          buffer[out];
          printf("\nItem consumed: %d",buffer[out]);
          sem_rel(mutex);
          sem_rel(empty);
          sleep(rand()%5);
     }
     exit(1);
}
Beispiel #3
0
int producer()
{
     while(1)
     {
          sem_acq(empty);
          printf("\nItem produced: %d",count);

          sem_acq(mutex);
          in = (in+1)%n;
          buffer[in]=count++;
          sem_rel(mutex);
          sem_rel(full);
          sleep(rand()%2);
     }
     exit(1);
}
Beispiel #4
0
void *Writer(void* arg) {
    int x = (intptr_t) arg;
    sem_acq(wr_sem);
    printf("Writer %d is writing...\n",x);
    printf("Writer %d finished writng...\n",x);
    fflush(stdout);
    sem_rel(wr_sem);
    return NULL;
}
Beispiel #5
0
void *Consumer(void *arg){
    int item, i, index;
    
    index = (intptr_t)arg;
    
    for(i=0; i < NITERS; i++){
    	
    	sem_acq(shared.full);
    	sem_acq(shared.mutex);
    	
    	item = shared.buf[shared.out];
    	shared.out = (shared.out+1)%BUFF_SIZE;
    	printf("[P%d] Consuming %d ...\n", index, item); fflush(stdout);
    	
    	sem_rel(shared.mutex);
    	
    	sem_rel(shared.empty);
    	
    	if(i % 2 ==1 ) sleep(1);
    }
    return NULL;
}
Beispiel #6
0
void *Reader(void* arg) {
    int x = (intptr_t) arg;
    sem_acq(mutex);
    read_count+=1;

    if(read_count == 1)
        sem_acq(wr_sem);
    sem_rel(mutex);

    printf("Reader %d is reading...\n",x);
    fflush(stdout);

    sem_acq(mutex);
    read_count-=1;
    printf("Reader %d finished reading...\n",x);
    fflush(stdout);

    if(read_count == 0)
        sem_rel(wr_sem);
    sem_rel(mutex);

    return NULL;

}
Beispiel #7
0
void	close_connection(t_env *env, t_play *p)
{
	while (env->init && search_team(env))
	{
		sem_rel(env);
		sem_wait(env);
		sem_block(env);
	}
	if (env->init)
	{
		clearmap(env);
		exit(0);
	}
	env->map[return_pose(env, p->init.x, p->init.y)] = 0;
	shmdt (env->mem);
}