I ProzessA einen Prozess haben, der 2 Gewinde ThreadA und ThreadB beginnt. Beide Threads senden und empfangen Daten von ProcessB mit dem gleichen Socket-Deskriptor.senden Recv auf einem Sockel von mehreren Threads
So im Wesentlichen:
int s;
void thread_fnA(void*)
{
while(1) {
sendto(s);
recvfrom(s);
}
}
void thread_fnB(void*)
{
while(1) {
sendto(s);
recvfrom(s);
}
}
int main()
{
s = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(s);
dispatch_thread(A);
dispatch_thread(B);
}
Gibt es eine Möglichkeit, dass die Nachricht von Thread B empfangen werden konnte in Gewinde A.
So Abfolge der Ereignisse empfangen werden:
Thread A bereitet eine Nachricht vor und ruft sendto() auf;
Thread B beginnt mit der Ausführung und bereitet eine Nachricht vor und ruft sendto() auf;
Thread B ruft recvfrom() gleichzeitig mit Gewinde A.
jedoch der Inhalt der Nachricht von beiden Threads erwarteten verschieden sind. Können die Nachrichten ausgetauscht werden, ThreadB bestimmte Nachricht von ThreadA empfangen werden.
Sollte das Senden und Empfangen in einigen Sperren beteiligt sein. (Mutex)
Sie meinen also, dass die Nachrichten falsch platziert werden können. – Haswell
@Haswell Ja, es gibt eine Möglichkeit, dass es passieren wird. –