IRONSOFTWAREHOME
開發者更新

C# Interlocked(它如何對開發者起作用)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月21日

當處理多執行緒應用程式時,確保執行緒安全性成為防止競爭條件和資料損壞的關鍵因素。 在使用IronPDF進行PDF處理的世界裡,這個問題也不例外。 無論您是在生成、操作或合併PDF,如果不維持正確的同步,並行運行這些任務可能會導致意外結果。 這就是C#的Interlocked類開始發揮作用的地方,它提供了一個簡單而有效的方法來確保多執行緒環境中的執行緒安全操作。

C#的Interlocked類是什麼?

在C#中,Interlocked類提供了原子操作來處理多個執行緒共享的變數。 這確保了一個執行緒的操作不會被另一個執行緒干擾,這在您需要保證操作以受控且一致的方式執行時是至關重要的。 另一方面,IronPDF是一個強大的程式庫,允許.NET開發人員建立、編輯和操作PDF。

當您將兩者結合起來 - 使用Interlocked以確保執行緒安全,使用IronPDF進行PDF操作 - 您就得到了處理並行編程中PDF任務的強效解決方案。 但是這如何運作,您為什麼要關心? 讓我們深入探討Interlocked在IronPDF處理中的角色。

IronPDF:一體化的C# PDF程式庫

C# Interlocked(開發者如何使用): 圖1

IronPDF是一個多功能且功能豐富的程式庫,旨在與C#和.NET應用程式無縫合作,用於PDF生成和操作。 其簡單性和性能使其成為需要自動化PDF任務的開發人員的熱門選擇。 下面是IronPDF的一些關鍵功能:

  • HTML轉PDF: IronPDF允許您將HTML內容轉換為高品質PDF。 這對於建立報告、發票以及以HTML呈現的任何內容特別有用。
  • PDF編輯和操作: 您可以通過合併、拆分或提取頁面來操作現有的PDF文件。 此外,IronPDF允許您修改PDF中的內容,如新增文字、圖像或註釋。
  • PDF表單和欄位: IronPDF支援處理PDF表單,包括以編程方式填寫表格欄位。 這對於自動化生成調查、申請和合同文件的過程是理想的。
  • 數位簽名: 其提供的功能允許使用安全簽名數位簽署PDF,這是需要安全文件交易的行業(如法律和金融部門)所必需的功能。

利用這些功能,IronPDF幫助開發人員高效地建立、管理和自動化PDF工作流,同時確保高品質的結果。 無論您是處理動態HTML內容還是操作現有文件,IronPDF都提供了所需的工具來簡化與PDF相關的任務。

為什麼在IronPDF處理中使用Interlocked?

執行緒安全和並發性

在多執行緒應用中,多個執行緒可以同時嘗試存取和修改共享資料。如果沒有適當的同步,這可能導致像競爭條件這樣的問題,兩個執行緒試圖同時更新相同的資料。 這可能會導致不可預測的結果和難以除錯的錯誤。

Interlocked類確保這些並發操作是以原子方式處理的。 換句話說,當您使用Interlocked修改物件值時,變更會作為單一且不可中斷的操作發生,從而消除競爭條件的風險。

在IronPDF的上下文中,許多PDF處理任務(如新增頁面、編輯內容或從多個來源生成PDF)是並行處理的理想人選。 如果沒有同步,並行運行這些操作可能會導致PDF文件損壞或處理中的錯誤。 使用Interlocked確保這些操作即使在多執行緒環境中也能保持安全。

使用Interlocked處理不同資料型別

在處理不同資料型別的變數時,可以使用Interlocked安全地管理並發更新。 讓我們來看看您可能會遇到的一些資料型別:

  • 浮點值: 當需要引用型別進行操作時,可以使用Interlocked.CompareExchange方法處理浮點值。
  • 原始值: 進行更新時,重要的是在做出更改前使用原始值,以確保執行緒操作的一致性。
  • 公共靜態類: 您可以建立一個公共靜態類來封裝您的Interlocked操作,使您的程式碼更加模組化且易於維護。
  • 雙精度值: Interlocked不直接支持雙精度值,因為雙精度不是整數型別,且原子操作針對整數進行優化。 如果您需要對雙精度值進行原子操作,您可以通過使用長整型值並手動在雙精度和長整型值之間進行轉換來實現。
public static class ThreadSafeOperations
{
    private static int counter = 0;
    public static void IncrementCounter()
    {
        // Safely increment the counter using Interlocked
        Interlocked.Increment(ref counter);
    }
}

何時在IronPDF中使用Interlocked

當多個執行緒處理共享資源時,您應該使用Interlocked。 範例包括:

  • 在PDF生成中跟踪頁面編號。
  • 管理多個執行緒存取和修改的計數器或列表。

通過對這些操作使用Interlocked,您確保更新是執行緒安全的,從而防止衝突和確保資料完整性。

在IronPDF中實施Interlocked

Basic Usage of Interlocked in C#

Interlocked類提供多種方法來對變數進行原子操作,例如:

  • Add: 將兩個整數相加並將結果儲存在一個變數中。
  • CompareExchange: 比較兩個值是否相等,並在相等時替換其中一個值。
  • Increment: 將一個int值增加1,並返回新值。
  • Decrement: 將一個int值減少1,並返回新值。

例如,如果您需要在多執行緒環境中安全地遞增共享計數器,請使用Interlocked.Increment:

int counter = 0;
Interlocked.Increment(ref counter);

這確保了即使在多個執行緒同時修改計數器時,計數器也是安全遞增的。

使用IronPDF和C# Interlocked的執行緒安全PDF生成

讓我們來看一個實際例子,看看如何在多執行緒環境中使用Interlocked和IronPDF。 假設您正在並行執行緒中生成PDF文件,需要讓每個執行緒都有一個唯一的標識符或頁面編號。

您可以這樣實現:

using IronPdf;
using System;
using System.Threading;
using System.Collections.Generic;

class Program
{
    static int pageCount = 0;
    static readonly object lockObject = new object(); // Object for locking

    static void Main()
    {
        var threads = new Thread[5];
        List<PdfDocument> pdfList = new List<PdfDocument>();
        
        // Create threads for parallel PDF generation
        for (int i = 0; i < threads.Length; i++)
        {
            threads[i] = new Thread(() => GeneratePdf(pdfList));
            threads[i].Start();
        }

        // Wait for all threads to complete
        foreach (var thread in threads)
        {
            thread.Join();
        }

        // Merge all the generated PDFs
        PdfDocument finalPdf = pdfList[0]; // Start with the first document

        // Merge remaining PDFs into finalPdf
        for (int i = 1; i < pdfList.Count; i++)
        {
            finalPdf = PdfDocument.Merge(finalPdf, pdfList[i]);
        }

        // Save the merged PDF
        finalPdf.SaveAs("MergedGeneratedPDF.pdf");
        Console.WriteLine("All PDFs merged and saved successfully.");
    }

    static void GeneratePdf(List<PdfDocument> pdfList)
    {
        // Use ChromePdfRenderer instead of HtmlToPdf
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Use Interlocked to ensure unique page number per thread and using a "ref object" to reference the pageCount object 
        int pageNum = Interlocked.Increment(ref pageCount);

        // Generate a PDF page using ChromePdfRenderer
        var pdfPage = renderer.RenderHtmlAsPdf($"Page {pageNum} generated by thread {Thread.CurrentThread.ManagedThreadId}");

        // Add generated PDF page to the list (thread-safe)
        lock (lockObject) // Ensure thread-safety when adding to shared list
        {
            pdfList.Add(pdfPage);
        }

        string fileName = $"GeneratedPDF_{pageNum}.pdf";
        pdfPage.SaveAs(fileName);
        Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} generated: {fileName}");
    }
}

程式碼説明

這個C#程式使用執行緒並行生成多個PDF,然後使用IronPDF將它們合併成一個PDF。

  1. 多執行緒: 建立了5個執行緒以並行生成PDF。 每個執行緒使用Interlocked.Increment獲得一個唯一的頁面編號。
  2. 執行緒安全: 使用lock語句同步存取共享的pdfList,防止在將PDF新增到列表時發生競爭條件。
  3. 合併PDF: 所有執行緒完成後,使用PdfDocument.Merge順序合併pdfList中的PDF,並保存最終的PDF。
  4. 同步化: 主執行緒使用thread.Join()等待所有執行緒完成後再繼續進行合併。

控制台輸出

C# Interlocked(開發者如何使用):圖2 - 使用C# Interlocked的執行緒安全PDF生成的控制台輸出

PDF輸出

C# Interlocked(開發者如何使用):圖3 - 使用C# Interlocked的執行緒安全PDF生成的PDF輸出

為什麼這是執行緒安全的

  • 執行緒安全的列表修改: 使用lock確保對共享的pdfList的修改是安全的,防止多個執行緒同時向列表中新增內容,造成競爭條件。
  • 無需異步程式碼:該程式碼不需要async/await,因為操作是順序的,且不涉及長時間運行的I/O或網路調用。 這裡的主要問題是確保對共享資料(列表)的存取已正確同步。

錯誤處理和性能考量

在處理多執行緒程式碼時,錯誤處理和性能優化是必不可少的。

  • 錯誤處理: 雖然Interlocked確保了執行緒安全性,但您仍需要管理PDF生成邏輯中可能的錯誤。 您可以使用try-catch塊來優雅地處理異常:
try
{
    finalPdf.SaveAs(fileName);
}
catch (Exception ex)
{
    Console.WriteLine($"Error generating PDF: {ex.Message}");
}
  • 性能考量: 雖然Interlocked對原子操作進行了優化,但過多的同步會帶來開銷。 如果您處理大量的並發操作,應將同步最小化到最關鍵的共享變數,以減少爭用。

結論

執行緒安全性在多執行緒應用中特別重要,尤其是當涉及到像計數器或列表這樣的共享資源時。 在使用IronPDF進行PDF建立或操作時,整合Interlocked可確保操作保持執行緒安全和可靠性。

通過將Interlocked與IronPDF結合使用,.NET開發人員可以高效地擴展其PDF處理工作流,同時保持資料的完整性。 無論您是生成報告、合併文件或在並行中進行複雜的PDF操作,Interlocked都能幫助維持一致性並避免競爭條件。

藉由這些最佳實踐,您可以充分利用IronPDF的功能,並確保您的多執行緒PDF工作流高效且穩健。準備好今天就整合IronPDF,親身體驗其強大的PDF建立和操作功能!

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密。
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999起