Also ich erstelle 3 Threads. 1, um eine Eingabe von dem Benutzer 1 zu lesen, um einige Zeichenfolgenmanipulation auszuführen, und 1, um in die Eingabeaufforderung zu schreiben.Segmentierung Fehler beim Ausführen von 3 Threads
Ich habe einige cout
Anweisungen eingerichtet, um zu sehen, wo ich einen Fehler erhalte. Ich kann sehen, dass ich den Fehler bekomme, nachdem ich die Threads erstellt habe.
Ich denke, es muss etwas sein, mit dem Thread zuerst ausgeführt wird. Ich möchte die readerThread
Funktion zuerst ausführen, dann die converterThread
und schließlich die writerThread
. Ich habe mich nach einer Möglichkeit umgesehen, um mehr Logik zu implementieren, um die Reihenfolge zu beschränken, in der die Threads ausgeführt werden und keine finden können.
Sowieso hier ist mein Code:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int counter = 0;
vector<string> readBuffer;
vector<string> writeBuffer;
int main(){
int readerInt,writerInt,converterInt;
pthread_t reader,writer,converter;
cout << "BEFORE"<<endl;
readerInt = pthread_create(&reader, NULL,readerThread,NULL);
converterInt = pthread_create(&converter,NULL,converterThread,NULL);
writerInt = pthread_create(&writer,NULL,writerThread,NULL);
cout << "AFTER" << endl;
pthread_join(reader,NULL);
pthread_join(converter,NULL);
pthread_join(writer,NULL);
return 0;
}
void * readerThread(void *unused){
while(1){
pthread_mutex_lock(&lock);
string readLine;
getline(cin,readLine);
counter++;
readBuffer.push_back(readLine);
pthread_mutex_unlock(&lock);
}
}
void * converterThread(void *unused){
while(1){
pthread_mutex_lock(&lock);
if(readBuffer.size() > 0){
replace(readBuffer[counter-1].begin(),readBuffer[counter-1].end(),' ','%');
writeBuffer.push_back(readBuffer[counter-1]);
}
pthread_mutex_unlock(&lock);
}
}
void * writerThread(void *unused){
while(1){
pthread_mutex_lock(&lock);
cout << writeBuffer[counter-1] << endl;
pthread_mutex_unlock(&lock);
}
}
Klingt wie ein [Leser-Schreiber] (https://en.wikipedia.org/wiki/Readers-Writers_Problem) Problem. Wenden Sie sich an Ihren nächsten Browser und starten Sie Google, die Antwort sollte warten – smac89