私がC#(コードの一部)で書いた単純なマルチスレッドWebサーバーがあります:
public class MyServer
{
private readonly HttpListener _listener = new HttpListener();
private int _dataId;
public HttpServer(string prefix, string folder)
{
System.Threading.ThreadPool.SetMaxThreads(50, 1000);
System.Threading.ThreadPool.SetMinThreads(50, 50);
//........
}
public void Start()
{
_listener.Start();
while (true)
ThreadPool.QueueUserWorkItem(ProcessRequest, _listener.GetContext());
}
private void ProcessRequest(object obj)
{
//.....
}
}
ブラウザ(またはメインスレッドを1つだけ使用するもの)でリクエストを送信する場合は、すべて問題ありません。ただし、以下のコードで実行すると、サーバーは通常、さまざまなリクエストに対して同じ値を受け取ります。
あなたの考えは?
-編集-:
簡単な質問は、ローカル変数のみを使用することで、コードがスレッドセーフであることを確認できますか?逆もまた同様です。インスタンス変数(静的ではなく、私の場合は_dataIdlock
)を使用している場合、スレッドセーフにするために(たとえば、キーワードによって)それらを「管理」する必要がありますか?