Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
C pthread schlafen lassen ohne mutex machbar?
- Ersteller roker002
- Erstellt am
XunnD
Lieutenant
- Registriert
- März 2006
- Beiträge
- 728
roker002 schrieb:ne mit sleep sperre ich nicht den thread sondern den Prozess... Naja, keine ahnung genau, aber alle threads "schlafen" wenn ich sleep aufrufe!
The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process.
Quelle: http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html
Soviel dann zum Thema...
Vielleicht lockst Du ein Mutex, was von allen Threads gebraucht wird und rufst dann sleep auf - dass dann alle Threads schlafen, ist klar...
Zuletzt bearbeitet:
- Registriert
- Dez. 2007
- Beiträge
- 2.107
Eigentlich gibs da nichts zu schreiben!
ich greife nur 1x auf den anderen thread zu. das muss es sein. Wenn ich die Daten aus dem anderen thread rauslese muss diese natürlich warten!
lässt sich das problem loslösen durch den detach lösen?
also bei mir sieht es so aus!
thread 1.... net socket.
thread 2.... reine daten auswertung.
thread 2 liest die latenz des thread 1. Latenz wird durch die Zeitmessung gemacht und in eine Variable gespeichert.
thread 2 liest daten und schläft dann für x sekunden. Nach x sekunden wertet dieser wieder die daten aus und schläft weiter. USW..
ich greife nur 1x auf den anderen thread zu. das muss es sein. Wenn ich die Daten aus dem anderen thread rauslese muss diese natürlich warten!
lässt sich das problem loslösen durch den detach lösen?
also bei mir sieht es so aus!
thread 1.... net socket.
thread 2.... reine daten auswertung.
thread 2 liest die latenz des thread 1. Latenz wird durch die Zeitmessung gemacht und in eine Variable gespeichert.
thread 2 liest daten und schläft dann für x sekunden. Nach x sekunden wertet dieser wieder die daten aus und schläft weiter. USW..
XunnD
Lieutenant
- Registriert
- März 2006
- Beiträge
- 728
Schreib doch bitte den Sourcecode einmal hier auf. Du kannst ja Deine "wertvollen" Zeilen auslassen. Wichtig ist, dass Du alle Threadfunktionen und Synchronisationsmechanismen hier darstellst.
Funktionsrumpf A (thread funktion) {
...
while(...) {
...
pthread_mutex_lock(...);
...
pthread_mutex_unlock(...);
...
sleep(...);
...
}
...
}
So in der Art - verstehst Du?
Dann können wir Dir auch bestimmt helfen.
--------------------
pthread_detach bewirkt nur, dass der erzeugende Thread nicht auf den erzeugten Thread warten muss, und das der Speicher des erzeugten Threads automatisch vom System freigegeben wird, sobald er terminiert.
Funktionsrumpf A (thread funktion) {
...
while(...) {
...
pthread_mutex_lock(...);
...
pthread_mutex_unlock(...);
...
sleep(...);
...
}
...
}
So in der Art - verstehst Du?
Dann können wir Dir auch bestimmt helfen.
--------------------
pthread_detach bewirkt nur, dass der erzeugende Thread nicht auf den erzeugten Thread warten muss, und das der Speicher des erzeugten Threads automatisch vom System freigegeben wird, sobald er terminiert.
- Registriert
- Dez. 2007
- Beiträge
- 2.107
uuuups.... leute tut mir sehr leid!
ja es funktioniert. Ich habe leider vergessen die thread funktion aufzurufen die den thread startet. habe direkt die endlosschleife laufen lassen. Deswegen hatte es auch nicht geklappt!
ja alles läuft supper! danke
ja es funktioniert. Ich habe leider vergessen die thread funktion aufzurufen die den thread startet. habe direkt die endlosschleife laufen lassen. Deswegen hatte es auch nicht geklappt!
ja alles läuft supper! danke
XunnD
Lieutenant
- Registriert
- März 2006
- Beiträge
- 728
roker002 schrieb:uuuups.... leute tut mir sehr leid!
ja es funktioniert. Ich habe leider vergessen die thread funktion aufzurufen die den thread startet. habe direkt die endlosschleife laufen lassen. Deswegen hatte es auch nicht geklappt!
ja alles läuft supper! danke
Meinst Du pthread_create?
Die Threadfunktion aus dem Mainthread aufzurufen bedeutet übrigens, dass diese Funktion dann im Mainthread abläuft und keinen neuen Thread abspaltet. Du musst explizit pthread_create verwenden.
- Registriert
- Dez. 2007
- Beiträge
- 2.107
Code:
void setpoints_start_points_thread()
{
int thread;
thread = pthread_create(&setpoints_pthread, NULL, (void *)&setpoints_refreshing, NULL);
if(thread != 0)
{
switch(thread)
{
case EAGAIN:
printf("\nThe system lacked the necessary resources to create another thread, or the system-imposed limit on the total number of threads in a process {PTHREAD_THREADS_MAX} would be exceeded.\n\n");
exit(EXIT_FAILURE);
break;
case EINVAL:
printf("\nThe value specified by attr is invalid.\n\n");
exit(EXIT_FAILURE);
break;
case EPERM:
printf("\nThe caller does not have appropriate permission to set the required scheduling parameters or scheduling policy.\n\n");
exit(EXIT_FAILURE);
break;
}
}
}
hmm ist schon bisschen blöd von mir!
Ähnliche Themen
- Antworten
- 4
- Aufrufe
- 1.139
- Antworten
- 12
- Aufrufe
- 2.414