Exemple #1
0
int main(int argc, char* argv[]) {
	if (argc != 3){
		printf("Usage: gibaus single_character sleep_time\n");
		exit(-1);
	}

	//versuch eine neue semphore mit startwert 1 zu öffnen
	//wenn schon vorhanden dann nur öffnen
	int semid = sem_create(23,1);
	if (semid < 0){
		semid = sem_open(23);
		if (semid < 0){
			perror("Semaphore open/create Fehler");
			exit(-1);
		}
	}

	printf("wert nach create/open %i\n",sem_read(semid));

	char zeichen =(int)argv[1][0];
	int sleep_time = atoi(argv[2]);


	int i,j;
	for (i = 0; i < ITERATIONS; i++){
		printf("vor krit %i\n",sem_read(semid));
		//P vor krit. Bereich
		if (-1==P(semid)) {
			/* Fehler */
			perror("semop P");
		}
		//kritischer Bereich anfang
		printf("in krit %i\n",sem_read(semid));
		for (j = 0; j < ANZ_ZEICHEN; j++){
			printf("%c",zeichen);
			fflush(NULL);
			sleep(sleep_time);
		}
		printf("\n");
		//kritischer Bereich ende, dann V
		if (-1==V(semid)) {
			/* Fehler */
			perror("semop V");
		}
		printf("nach krit %i\n",sem_read(semid));
	}

	//semaphore wird nicht mehr gebraucht
	//sem_delete(23);

	exit(0);
}
Exemple #2
0
void   hwSemaphoreTake(int sem_num, uint8_t val)
{
    OS_ASSERT_COND(sem_num < NUMBER_OF_HW_SEMAPHORES);
    OS_ASSERT_COND(val != 0);
 
    do
    {
        sem_write(sem_num, val);
    } while (sem_read(sem_num) != val);
}
Exemple #3
0
os_status   hwSemaphoreTryTake(int sem_num, uint8_t val)
{
    OS_ASSERT_COND(sem_num < NUMBER_OF_HW_SEMAPHORES);
 
    sem_write(sem_num, val);
 
    if (sem_read(sem_num) == val)
        return OS_SUCCESS;
 
    return OS_FAIL;
}
Exemple #4
0
uint8_t hwSemaphoreGetVal(int sem_num)
{
    OS_ASSERT_COND(sem_num < NUMBER_OF_HW_SEMAPHORES);
 
    return sem_read(sem_num);
}