我正在构建一个由服务器和客户端组成的小型聊天程序。服务器保留与之交互的客户端列表。
我在服务器上有两个工作线程。一个处理传入的客户端连接。另一个处理传入的客户端消息。
现在,由于两个线程都与一个名为“clients”的列表交互,所以我做了这样的事情。
// 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
*/
}
}
}
这是正确使用锁来防止我的列表同时被两个不同的线程更改吗?
到目前为止,我没有遇到任何问题,但我只是想确保它是正确的。