threads
-
hallo
ich bekomme folgende fehler meldung.
gmake all-recursive
gmake[1]: Wechsel in das Verzeichnis »/home/stefan/readerwriterproblem«
Making all in readerwriterproblem
gmake[2]: Wechsel in das Verzeichnis »/home/stefan/readerwriterproblem/readerwriterproblem«
/bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wbad-function-cast -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -o readerwriterproblem main.o
main.o: In functionReader(void*)': /home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:21: undefined reference to
sem_wait'
/home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:24: undefined reference tosem_wait' /home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:26: undefined reference to
sem_post'
/home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:30: undefined reference tosem_post' main.o: In function
Writer(void*)':
/home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:37: undefined reference tosem_wait' /home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:39: undefined reference to
sem_post'
main.o: In functioninitSemaphores()': /home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:44: undefined reference to
sem_init'
/home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:45: undefined reference tosem_init' main.o: In function
destroySemaphores()':
/home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:49: undefined reference tosem_destroy' /home/stefan/readerwriterproblem/readerwriterproblem/main.cpp:50: undefined reference to
sem_destroy'
collect2: ld returned 1 exit status
gmake[2]: Verlassen des Verzeichnisses »/home/stefan/readerwriterproblem/readerwriterproblem«
gmake[2]: *** [readerwriterproblem] Fehler 1
gmake[1]: Verlassen des Verzeichnisses »/home/stefan/readerwriterproblem«
gmake[1]: *** [all-recursive] Fehler 1
gmake: *** [all] Fehler 2
*** fehlgeschlagen ***hier ist der code
#include <pthread.h> #include <semaphore.h> #include <iostream> #include <math.h> #include <unistd.h> using namespace std; const int numOfReader = 4; const int numOfWriter = 1; int rc = 0; sem_t dataBase; sem_t mutex; void* Reader(void *arg); void* Writer(void *arg); void* Reader(void *arg){ while(true){ sem_wait(&mutex); ++rc; if(rc == 1){ sem_wait(&dataBase); } sem_post(&mutex); cout<<"Reader " << getpid() <<"liest aus der Datenbank" << endl; sem_post(&dataBase); } } void* Writer(void *arg){ while(true){ sem_wait(&dataBase); cout<<"Writer" << getpid() << "Schreibt in die Datenbank" << endl; sem_post(&dataBase); } } void initSemaphores(){ sem_init(&dataBase,0,1); sem_init(&mutex,0,1); } void destroySemaphores(){ sem_destroy(&dataBase); sem_destroy(&mutex); } void startThreds(){ pthread_t id[numOfWriter + numOfReader]; int pthread_return = 0; for(int i=0;i<numOfReader;++i){ pthread_return = pthread_create(&id[i],0,Reader,0); } for(int i=0;i<numOfWriter;++i){ pthread_return = pthread_create(&id[numOfReader+i],0,Writer,0); } } int main(){ initSemaphores(); startThreds(); destroySemaphores(); return 0; }
und wie kann ich das programm eine zeitlang anhalten.
also unter windows würde ich es mit sleep machen.danke für eure hilfe.
-
void* Reader(void arg);
void Writer(void *arg);Warum void***** ?
-
Original erstellt von stef:
und wie kann ich das programm eine zeitlang anhalten.
also unter windows würde ich es mit sleep machen.Unter Linux macht man das auch mit "sleep()" oder "usleep()" oder "nanosleep()"
Schau' doch mal in die entsprechenden man-Pages.