Supposons qu'il existe deux types de paquets dans le serveur de discussion. Ces deux paquets sont utilisés pour obtenir le statut d'un autre utilisateur. Un (appelez cela comme REQ-STAT, RES-STAT) est formulaire de demande et de réponse et un autre (NOT-STAT) est paquet de formulaire de notification.Problème de synchronisation général dans la programmation réseau
Par exemple, si j'envoie [REQ-STAT simpson] au serveur et je peux obtenir [RES-STAT simpson en ligne]. Ou, si le statut de l'utilisateur SIMPSON a été changé, je vais obtenir le statut de l'utilisateur comme [NOT-STAT simpson offline]. OK, le serveur fonctionne sur une machine multi-core et utilise plusieurs threads, bien sûr.
Si le serveur se [REQ-STAT simpson] paquet, le serveur préparera paquet [RES-STAT simpson en ligne] - si le SIMPSON est en ligne. À ce stade, le SIMPSON s'est déconnecté, de sorte que le serveur envoie le paquet [NOT-STAT simpson offline] au client. Une fois le serveur envoyé paquet [NOT-STAT simpson hors ligne], paquet [RES-STAT simpson en ligne] est envoyé
// the server lock during using user data structure but not for the whole process.
------[REQ-STAT simpson]------> simpson is online and prepare response packet
<--[NOT-STAT simpson offline]-- simpson has been logged out and send not packet
<--[RES-STAT simpson online]--- send response
// the latest packet does not have the latest information !!!
ci-dessus peut scénario se produire si BLOCAGE n'a pas utilisé pour processus? Si oui, dois-je verrouiller tout cela? D'autres solutions?
Merci.