首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

打造 C# 爬蟲蜘蛛程式 (三):多線程同步與完成偵測機制

     編輯:關於C語言

Done 類別:協調多線程完成狀態

核心欄位:m_activeThreads (活動線程數)、m_started (是否進入正式階段)。

WaitBegin:等待蜘蛛啟動


public void WaitBegin()
{
    lock (this)
    {
        while (!m_started) Monitor.Wait(this);
    }
}

WorkerBegin / WorkerEnd:線程生命週期通知


public void WorkerBegin()
{
    lock (this)
    {
        m_activeThreads++;
        m_started = true;
        Monitor.Pulse(this); // 喚醒 WaitBegin
    }
}

public void WorkerEnd()
{
    lock (this)
    {
        m_activeThreads--;
        Monitor.Pulse(this); // 喚醒 WaitDone
    }
}

WaitDone:等待所有工作結束


public void WaitDone()
{
    lock (this)
    {
        while (m_activeThreads > 0) Monitor.Wait(this);
    }
}

調用順序

  1. 主線程啟動蜘蛛後呼叫 WaitBegin() 阻塞直到第一個 WorkerBegin。
  2. 隨後呼叫 WaitDone() 阻塞直到 m_activeThreads 歸零。
  3. 每個工作線程處理 URL 前呼叫 WorkerBegin(),完成後呼叫 WorkerEnd()。

此模式解決「初始階段無活動線程導致 WaitDone 過早返回」的問題,確保準確偵測爬蟲真正完成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved