チャットサーバーには2種類のパケットがあるとします。これらの2つのパケットは、別のユーザのステータスを取得するために使用されます。一つの要求と応答の形式と別の(NOT-STAT)である(REQ-STAT、RES-STATとしてこれを呼び出す)が通知形式パケットです。例えばネットワークプログラミングの一般的なタイミング問題
、私は、サーバーに[REQ-STATシンプソン]を送って、私は[RES-STATシンプソンオンライン]を得ることができます。 SIMPSONユーザーのステータスが変更された場合は、[NOT-STAT simpson offline]のようなユーザーのステータスを取得します。
さて、サーバーはマルチコアマシン上で実行されており、もちろん複数のスレッドを使用しています。サーバが[REQ-STATシンプソン]パケットを取得する場合、サーバはパケットを準備します
[オンラインRES-STATシンプソン] - SIMPSONがオンラインである場合。この時点で、SIMPSONはログアウトしたので、サーバはパケット[NOT-STAT simpson offline]をクライアントに送信します。サーバがを送った後に[NOT-STATシンプソンオフライン]パケット、[オンラインRES-STATシンプソン]パケットは、LOCKは、全体のプロセスのために使用されていない場合
// 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 !!!
は、シナリオの上に起こることができます送信されますか?もしそうなら、私はそれをすべてロックする必要がありますか?その他のソリューション?
ありがとうございました。