안녕하세요.
C# Multi threads, lock, queue관련해서 질문드립니다.
아래와 같은 코드에서 lstServers 객체를 30개 정도 만든다고 가정할때
각 객체들이 Network에서 async하게 받은 데이터를 동시에 하나의 queue에 넣을 때
lock이 걸려서 queue가 깨지는 일은 없지만, load때문에 간혹 쓰지 못하는 경우가 발생합니다.
이럴 경우 어떻게 해결할 수 있을지 잘 모르겠습니다.
public class MainClient : Form
{
public static Queue Q = new Queue<byte[]>();
InitializeComponent();
private void btnConnect_Click(object sender, EventArgs e)
{
lstServers = new List<SocketNetworks>();
lstServers.Add(new SocketNetworks("127.0.0.1", 1111));
lstServers.Add(new SocketNetworks("127.0.0.1", 2222));
for (int i = 0; i < lstServers.Count; i++)
{
lstServers[i].Server_Connect();
}
}
public static void DataInsertQueue(byte[] buff)
{
lock (Q)
{
Q.Add(buff);
}
}
}
public class SocketNetworks : MainClient
{
public SocketNetworks(string serverIP, int serverPort)
{
this.serverIP = serverIP;
this.serverPort = serverPort;
}
public void Server_Connect()
{
//... Socket networks..
}
// ....
private void ReceiveCallBack(IAsyncResult ar)
{
byte[] Ibuff = (byte[])ar.AsyncState;
int recv = ClientSocket.EndReceive(ar);
// 다수의 작업.. parsing packets and control servers등 후
MainClient.DataInsertQueue(Ibuff); <<<<<<<<<<<<<
}
...
}
[최초 등록일: ]
[최종 수정일: 10/27/2015]