你需要某種同步 - 爲每個線程ManualResetEvent聽起來可能,這取決於你的線程功能。
編輯:感謝您的更新 - 這裏有一個基本的例子:
// initComplete is set by each worker thread to tell StartThreads to continue
// with the next thread
//
// allComplete is set by StartThreads to tell the workers that they have all
// initialized and that they may all resume
void StartThreads()
{
var initComplete = new AutoResetEvent(false);
var allComplete = new ManualResetEvent(false);
var t1 = new Thread(() => ThreadProc(initComplete, allComplete));
t1.Start();
initComplete.WaitOne();
var t2 = new Thread(() => ThreadProc(initComplete, allComplete));
t2.Start();
initComplete.WaitOne();
// ...
var t6 = new Thread(() => ThreadProc(initComplete, allComplete));
t6.Start();
initComplete.WaitOne();
// allow all threads to continue
allComplete.Set();
}
void ThreadProc(AutoResetEvent initComplete, WaitHandle allComplete)
{
// do init
initComplete.Set(); // signal init is complete on this thread
allComplete.WaitOne(); // wait for signal that all threads are ready
// resume all
}
注意,StartThreads
方法將發生阻塞而線程初始化 - 這可能會或可能不會是一個問題。
什麼是你的問題域 - 可能有一些diffenrt方式來解決它 – swapneel
爲什麼不只是執行你的主線程中的所有6'進度',然後產生額外的線程? –
,因爲'一些進度'需要在每個線程..有一些messageqeue問題,如果我初始化我主要的 – MariusK