#include #include #include #include #include #include #include #include #include #include #include #include #include #define THR_AMOUNT 1 char *semName = "/testSem"; struct timespec t; void *funcA(void *parm){ sem_t *binSem; if ((binSem = sem_open(semName, O_CREAT)) == SEM_FAILED){ perror("cannot open Semaphore"); exit(1); } printf("semAdress: %p\n", binSem); printf("starting Thread A\n"); clock_gettime(CLOCK_REALTIME, &t); //while (sem_wait(binSem) == -1 && errno == EINTR) // ; t.tv_sec += 5; sem_timedwait(binSem, &t); printf("finishing Thread A\n"); sem_close(binSem); pthread_exit(NULL); } int main(int argc, char **argv) { int co,rc; pthread_t testThread[THR_AMOUNT]; pthread_attr_t thrAttr; struct sched_param param = { .sched_priority = 99 }; sem_t *binSem; if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) { perror("could not lock memeory\n"); exit(1); } if ((binSem = sem_open(semName, O_CREAT)) == SEM_FAILED){ perror("cannot open Semaphore"); exit(1); } printf("semAdress: %p\n", binSem); sem_post(binSem); sem_wait(binSem); pthread_attr_init(&thrAttr); pthread_attr_setdetachstate(&thrAttr,PTHREAD_CREATE_JOINABLE); pthread_attr_setinheritsched(&thrAttr,PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy(&thrAttr,SCHED_FIFO); pthread_attr_setschedparam(&thrAttr,¶m); if ( (rc = pthread_create(&testThread[0],&thrAttr, funcA, NULL)) != 0 ){ fprintf(stderr, "cannot create Threads %s\n", strerror(rc)); exit(1); } for ( co = 0; co < THR_AMOUNT; co++) { if ( pthread_join(testThread[co], NULL) != 0 ){ perror("cannot join Threads"); exit(1); } } if (munlockall() == -1){ perror("munlockall failure"); exit(1); } sem_close(binSem); sem_unlink(semName); return 0; }