サーバーとクライアントで構成される小さなチャット プログラムを作成しています。サーバーは、対話するクライアントのリストを保持しています。
サーバー上に 2 つのワーカー スレッドがあります。1 つは着信クライアント接続を処理します。もう 1 つは受信クライアント メッセージを処理します。
さて、両方のスレッドが「クライアント」と呼ばれるリストと対話するので、私はこのようなことをしました。
// The clients list looks something like this...
List<TcpClient> clients;
// This is running on one thread.
ConnectionHandler()
{
while(true)
{
// Wait for client to connect, etc. etc.
// Now, add the client to my clients List.
lock(clients)clients.Add(myNewClient);
}
}
// This is running on another thread.
ClientHandler()
{
while(true)
{
lock(clients)
{
/*
This will be handling things like incoming messages
and clients disconnecting (clients being removed from
the 'clients' List
*/
}
}
}
これは、リストが 2 つの異なるスレッドによって同時に変更されるのを防ぐためのロックの正しい使用法ですか?
これまでのところ問題はありませんでしたが、正しいことを確認したいだけです。