예제 #1
0
int main(){
    key_t clave;
    int mem,
        *nums,
        numsAux[3],
        semaforo,
        i = 0;
    
    clave = ftok(".",'F');
    
    mem = shmget(clave, TAM * sizeof(int), IPC_CREAT | 0660);
    
    nums = (int*) shmat(mem, NULL, 0);

    if ( ( semaforo = semget(clave, 2, IPC_CREAT | IPC_EXCL | 0660 ) ) == -1 ){
        perror("main: semget");
        semctl(semaforo, 0, IPC_RMID);
        exit(1);
    }
    
    setSem(semaforo, 0, 1);
    setSem(semaforo, 1, 0);
    
    printf("Ingrese 3 numeros enteros.\n");
    for( i = 0 ; i < 3 ; i++){
        printf("-> ");
        scanf("%d", &numsAux[i]);
    }
    
    while(numsAux[0] != 99 && numsAux[1] != 99 && numsAux[2] != 99){
        
        if( P(semaforo, 0) )
            exit(1);
        
        printf("Escribiendo en memoria...\n\n");
        
        nums[0] = numsAux[0];
        nums[1] = numsAux[1];
        nums[2] = numsAux[2];
        
        if( V(semaforo, 1) )
            exit(1);
        
        printf("Ingrese 3 numeros enteros.\n");
        for( i = 0 ; i < 3 ; i++){
            printf("-> ");
            scanf("%d", &numsAux[i]);
        }
    }
    
    shmdt(nums);
    
    shmctl(mem, IPC_RMID, 0);
    
    rmSem(semaforo);
    
    return 0;
}
예제 #2
0
파일: semaphore.c 프로젝트: epintos/os-p1
int setAllSem(int sem_id, int sem_qty, int value) {
	int i = 0;
	for (i = 0; i < sem_qty; i++) {
		setSem(sem_id, i, value);
	}
	return EXIT_SUCCESS;
}