(以下のすべては簡潔にするために単純化されています)
処理オブジェクトへの静的参照があります。
Processor には、処理する情報であるオブジェクト Package を渡すことができる関数が含まれています。
パッケージは、処理する必要がある多数のパッケージのリストから取得されます。これらのパッケージはユニークです。ここでは、同じオブジェクトへの複数の参照はありません。
toProcess でパッケージを並列処理できるように、多くのスレッドを開始します。スタックが空になるまで、スレッドは toProcess スタックから使用可能な Package を Pop() します。
私の質問は次のとおりです。 in が別のスレッドによって上書きされる危険を冒すことはできますかpackage
、Check
それとも他のスレッドが の「コピーを作成」しCheck
ますか?
static class Program
{
static Processor processor = new Processor();
static Stack<Package> toProcess;
static Object sync = new Object();
static void RunThreads()
{
toProcess = GetPackages();
//start many threads using the Work delegate
}
static void Work()
{
while(true)
{
Package p;
lock(sync)
{
if(toProcess.Count == 0)
break;
p = toProcess.Pop();
}
processor.Check(p);
}
}
}
class Processor
{
public void Check(Package package)
{
//do many analyses on p and report results of p's analysis to elsewhere
}
}
class Package
{
//properties
}