我的應用程序從實時供稿中提取數據,並且一次只能對實時供稿進行一次調用。我爲約20個場景調用foreach,然後爲每個場景調用15次實時饋送。如何確保信號量在我釋放隨後的信號之前不會釋放?
我是一個新的線程,並通過互聯網和閱讀拖網後,我終於決定使用信號量。但是,我無法找到一種方法來首先保持信號量(用於場景的_pool),直到爲特定場景調用15次實時饋送。
我希望如果有一個更優雅的解決方案,這個問題(我敢肯定有這個問題) 在此先感謝。具有
private void button1_Click(object sender, EventArgs e)
{
_pool = new Semaphore(0, 1);
foreach (string s in str)
{
Thread n = new Thread(new ParameterizedThreadStart(method1));
n.Start(venue);
}
_pool.Release(1);
}
static void method1(object venue)
{
_pool.WaitOne();
for (int i = 1; i <= numThreads; i++)
{
string composite = i.ToString() + "," + venue;
Thread n = new Thread(new ParameterizedThreadStart(method2));
n.Start(composite);
}
_pool.Release(); //I need to ensure that this is called only after all threads
// spawned in the for loop corresponding to foreach thread are
// executed. But how?
}
static void method2(object i)
{
_pool2.WaitOne();
//Call to data engine and storing data in txt file
Thread.Sleep(100);
_pool2.Release();
}
+1一個有趣的問題,雖然我最初是想着那些棉花糖餅乾的東西 – heisenberg
錯誤的同步對象,信號量計數錯誤的方式。所有你需要的是所有線程上的Thread.Join()。或者由線程設置()的AutoResetEvent上的WaitAll()。 –