schreiben Funktionsaufrufe von mehreren Threads auf den gleichen Sockelist es sicher zu schreiben Funktion in GNU C mit mehreren Threads verwenden
ist es sicher? Möchten wir eine Synchronisation zwischen ihnen hinzufügen? Wird es fro Probleme verursachen wie Anwendung Schreib verzögert zu werden/von der Netzwerkschicht auf der Anwendungsschicht lesen
Wir GNU C++ Bibliotheken GCC 4 auf Linux Redhat Enviornment verwenden
Dies ist ein Server-Side-Verfahren, bei dem Es gibt nur 1 Socket-Konnektivität zwischen Server & Client Server & Client sind auf 2 verschiedenen Maschinen Daten werden vom Server zum Client Client an Server
gesendetProblem 1-Wenn Server Daten an die Client-Seite senden (Mehrere Threads schreiben dat a to client Side durch den gleichen Single Socket) Aber Daten Writen von einigen der Threads sind nicht auf Client-Seite gegangen es ist nicht einmal in den Netzwerk-Layer der gleichen Maschine gegangen (Tcpdump hat diese Daten nicht)
Problem 2-wenn Client Senden von Daten an Server-Daten Senden von Client wird in der Server-TCPdump nicht für die Server-Anwendung empfangen, die aus dem Socket von einem einzigen Thread mit einem "lesen" & "wählen" Funktionen in einer Schleife
Wir konnten das Muster des Auftretens dieser Probleme nicht identifizieren. Wir denken, dass dies passiert, wenn so viele Mehrfach-Threads in denselben Socket geschrieben werden. Wir sind nicht synchronisierte Schreibfunktion, in der Hoffnung, dass OS die Synchronisation verarbeitet
Es ist "sicher" in dem Sinne, dass Ihr Programm wohlgeformt ist, aber die Ergebnisse, die Sie auf Ihrem Socket sehen, sind möglicherweise nicht das, was Sie erwarten. –
@KerrekSB: das ist ein merkwürdiger Kommentar. Jedes Thread-unsichere Programm könnte in diesem Sinne als "sicher" bezeichnet werden, nein? –
@NedBatchelder: Sicher nicht. Zum Beispiel ist eine Funktion, die von einem statischen Puffer für ihre interne Zustandsspeicherung abhängt, einfach * nicht * thread-sicher, und ein Programm, das es mehrere Male gleichzeitig aufruft, ist nur schlecht definiert. Im Gegensatz dazu ist ein Programm, das gleichzeitig 'write' aufruft, nicht automatisch schlecht definiert. –