IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Interlocked (Jak to działa dla deweloperów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

Podczas pracy z aplikacjami wielowątkówymi zapewnienie bezpieczeństwa wątków staje sie kluczowym czynnikiem w zapobieganiu warunkom wyscigu i uszkodzeniu danych. W świecie przetwarzania PDF z IronPDF, to zagadnienie nie jest inne. Niezaleznie od tego, czy generujesz, manipulujesz czy łączysz pliki PDF, wykonywanie tych zadań jednoczesnie może prowadzic do nieoczekiwanych wynikow, jeśli nie zachowasz odpowiedniej synchronizacji. Tu wlasnie do gry wkracza klasa Interlocked w C#, zapewniając prosty i wydajny sposob na zapewnienie bezpieczeństwa wątków w środowisku wielowątkówym.

Czym jest klasa C# Interlocked?

W C# klasa Interlocked zapewnia operacje atomowe dla zmiennych wspoldzielonych przez wiele wątków. To zapewnia, ze działania jednego watku nie zostana zaklocone przez inny, co jest istotne, gdy musisz zapewnic, ze operacje sa wykonywane w kontrolowany i spójny sposob. Z drugiej strony, IronPDF to potężna biblioteka, która pozwala twórcom .NET na tworzenie, edycję i manipulowanie plikami PDF.

Kiedy łączysz te dwie rzeczy—Interlocked dla bezpieczeństwa wątków i IronPDF dla operacji na plikach PDF—otrzymujesz potężne rozwiązanie do obsługi zadań PDF w programowaniu wspolbiezny. Ale jak to działa i dlaczego powinno Cie to obchodzic? Przyjrzyjmy sie blizej roli Interlocked w przetwarzaniu IronPDF.

IronPDF: Wszechstronna biblioteka PDF dla C#

C# Interlocked (Jak to działa dla programistów): Rysunek 1

IronPDF to wszechstronna i bogata w funkcje biblioteka zaprojektowana do bezproblemowej pracy z aplikacjami C# i .NET w generowaniu i manipulowaniu PDF. Jego prostota i wydajność sprawiaja, ze jest to popularny wybor wsrod programistów, ktorym zalezy na automatyzacji zadań związanych z PDF. Poniżej przedstawiono kilka kluczowych funkcji IronPDF:

  • Konwersja HTML na PDF: IronPDF pozwala na konwersję treści HTML na wysokiej jakości PDF. Jest to szczególnie przydatne do tworzenia raportów, faktur i wszelkich treści renderowanych w HTML.
  • Edycja i manipulacja PDF: Możesz manipulować istniejącymi dokumentami PDF, scałając, dzieląc lub wyodrębniając strony. Dodatkowo, IronPDF pozwala modyfikować treści w PDF, takie jak dodawanie tekstu, obrazów lub adnotacji.
  • Formularze PDF i pola: IronPDF wspiera prace z formularzami PDF, w tym programistyczne wypelnianie pól formularzy. To idealne rozwiązanie do automatyzacji procesu generowania dokumentów, takich jak ankiety, aplikacje i umowy.
  • Podpisy cyfrowe: Oferuje funkcje podpisywania cyfrowego plików PDF przy użyciu bezpiecznego podpisu, co jest kluczowe dla branz wymagajacych bezpiecznych transakcji dokumentówych, takich jak sektory prawny i finansowy.

Wykorzystujac te funkcje, IronPDF pomaga programistom efektywnie tworzyć, zarządzać i automatyzowac przepływy pracy z PDF, zapewniając jednoczesnie wysokiej jakosci wyniki. Niezaleznie od tego, czy pracujesz z dynamiczna zawartościa HTML, czy manipulujesz istniejącymi dokumentami, IronPDF dostarcza narzędzia potrzebne do usprawnienia twoich zadań związanych z PDF.

Dlaczego warto używać Interlocked w przetwarzaniu IronPDF?

Bezpieczenstwo wątków i wspolbiezność

W aplikacjach wielowątkówych wiele wątków może probowac jednoczesnie dostepu i modyfikacji wspoldzielonych danych. Bez odpowiedniej synchronizacji może to prowadzic do problemow, takich jak warunki wyscigu, gdzie dwa wątki probuja jednoczesnie zaktualizować te same dane. Może to powodowac nieprzewidywalne wyniki i błędy trudne do debugowania.

Klasa Interlocked zapewnia, że te operacje wspolbiezne są obsługiwane atomowo. Innymi słowy, gdy używasz Interlocked do modyfikacji wartości obiektu, zmiana zachodzi jako pojedyncza, nieprzerywana operacja, co eliminuje ryzyko warunku wyscigu.

W kontekście IronPDF wiele zadań przetwarzania PDF—takich jak dodawanie stron, edytowanie treści czy generowanie PDF z wielu zrodel—jest idealnymi kandydatami do przetwarzania równoległego. Bez synchronizacji, uruchamianie tych operacji jednoczesnie może skutkowac uszkodzeniem plików PDF lub bledami podczas przetwarzania. Użycie Interlocked zapewnia, że te operacje pozostają bezpieczne, nawet w środowisku wielowątkówym.

Użycie Interlocked z różnymi typami danych

Przy pracy ze zmiennymi różnego typu danych, Interlocked może być używane do bezpiecznego zarządzania wspólbieżnymi aktualizacjami. Przyjrzyjmy się niektórym typom danych, które możesz napotkać:

  • Wartość zmiennoprzecinkowa: Metoda Interlocked.CompareExchange może być używana z wartościami zmiennoprzecinkowymi, gdy wymagany jest typ referencyjny do operacji.
  • Wartość oryginalna: Podczas aktualizacji ważne jest, aby pracować z wartością oryginalną przed wprowadzeniem zmian, aby zapewnić spójność w operacjach wątku.
  • Publiczna klasa statyczna: Możesz stworzyć publiczną klasę statyczną, aby kapsułkować swoje operacje Interlocked, dzięki czemu twój kod będzie bardziej modułowy i łatwiejszy do utrzymania.
  • Podwójna wartość: Interlocked nie wspiera bezpośrednio wartości double, ponieważ double nie jest typem całkowitym i operacje atomowe są zoptymalizowane dla wartości całkowitych. Jeśli potrzebujesz operacji atomowych na wartościach double, możesz to obejść, korzystając z wartości long i ręcznie konwertując między wartościami double i long.
public static class ThreadSafeOperations
{
    private static int counter = 0;
    public static void IncrementCounter()
    {
        // Safely increment the counter using Interlocked
        Interlocked.Increment(ref counter);
    }
}

Kiedy używać Interlocked z IronPDF

Powinieneś używać Interlocked w każdej sytuacji, gdy wiele wątków pracuje z współdzielonymi zasobami. Przykłady:

  • Śledzenie numerów stron w generacji PDF.
  • Zarządzanie licznikami lub listami, które są dostępne i modyfikowane przez wiele wątków.

Używając Interlocked do tych operacji, zapewniasz, że aktualizacje są bezpieczne dla wątków, zapobiegając konfliktom i zapewniając integralność danych.

Implementacja Interlocked z IronPDF

Basic Usage of Interlocked in C#

Klasa Interlocked oferuje kilka metod wykonywania operacji atomowych na zmiennych, takich jak:

  • Dodaj: Dodaje dwie liczby całkowite i zapisuje wynik w zmiennej.
  • CompareExchange: Porównuje dwie wartości pod względem równości i, jeśli są równe, zastępuje jedną z wartości.
  • Zwiększ: Zwiększa wartość int o jeden i zwraca nową wartość.
  • Zmniejsz: Zmniejsza wartość int o jeden i zwraca nową wartość.

Na przykład, jeśli potrzebujesz bezpiecznie zwiększyć współdzielony licznik w środowisku wielowątkowym, użyj Interlocked.Increment:

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

To zapewnia, że licznik jest bezpiecznie zwiększany, nawet gdy wiele wątków modyfikuje go jednocześnie.

Bezpieczne dla wątków generowanie PDF z IronPDF i C# Interlocked

Przyjrzyjmy się praktycznemu przykładowi użycia Interlocked z IronPDF w kontekście wielowątkowym. Załóżmy, że generujesz pliki PDF w wątkach równoległych i potrzebujesz, aby każdy wątek miał unikalny identyfikator lub numer strony.

Oto jak możesz to zaimplementować:

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}");
    }
}

Wyjaśnienie kodu

Ten program w C# generuje wiele PDF w równoległych wątkach, a następnie łączy je w jeden PDF, korzystając z IronPDF.

  1. Wielowątkowość: Tworzonych jest 5 wątków do współbieżnego generowania PDF. Każdy wątek otrzymuje unikalny numer strony przy użyciu Interlocked.Increment.
  2. Bezpieczeństwo wątkowe: Dostęp do wspólnej listy pdfList jest synchronizowany za pomocą wyrażenia lock, aby zapobiec warunkom wyścigu przy dodawaniu PDF do listy.
  3. Łączenie PDF: Po zakończeniu wszystkich wątków, PDF w pdfList są łączone sekwencyjnie za pomocą PdfDocument.Merge, a końcowy PDF jest zapisywany.
  4. Synchronizacja: Główny wątek czeka na zakończenie wszystkich wątków, korzystając z thread.Join() przed kontynuacją łączenia.

Wynik konsoli

Interlocked w C# (Jak to działa dla programistów): Rysunek 2 - Wydruk konsoli dla bezpiecznego wątkowo generowania PDF z użyciem C# Interlocked

Wynik w formacie PDF

Interlocked w C# (Jak to działa dla programistów): Rysunek 3 - Wydruk PDF dla bezpiecznego wątkowo generowania PDF z użyciem C# Interlocked

Dlaczego to jest bezpieczne dla wątków

  • Bezpieczna dla wątków modyfikacja listy: Użycie lock zapewnia, że modyfikacja wspólnej listy pdfList jest bezpieczna, zapobiegając dodawaniu przez wiele wątków do listy jednocześnie i powodowaniu warunków wyścigu.
  • Brak potrzeby asynchronicznego kodu: Kod nie wymaga async/await, ponieważ operacje są sekwencyjne i nie obejmują długotrwałych operacji I/O lub połączeń sieciowych. Głównym zmartwieniem tutaj jest zapewnienie, że dostęp do współdzielonych danych (lista) jest odpowiednio zsynchronizowany.

Obsługa błędów i rozważania dotyczące wydajności

Podczas pracy z kodem wielowątkowym obsługa błędów i optymalizacja wydajności są kluczowe.

  • Obsługa błędów: Chociaż Interlocked zapewnia bezpieczeństwo wątków, wciąż musisz zarządzać potencjalnymi błędami w logice generowania PDF. Możesz używać bloków try-catch do eleganckiego obsługi wyjątków:
try
{
    finalPdf.SaveAs(fileName);
}
catch (Exception ex)
{
    Console.WriteLine($"Error generating PDF: {ex.Message}");
}
  • Rozważania dotyczące wydajności: Chociaż Interlocked jest zoptymalizowany do operacji atomowych, nadmierna synchronizacja może wprowadzać dodatkowy narzut. Jeśli obsługujesz dużą ilość współbieżnych operacji, powinieneś zminimalizować synchronizację do najważniejszych współdzielonych zmiennych, aby zmniejszyć kontencję.

Wnioski

Bezpieczeństwo wątkowe jest kluczowe w aplikacjach wielowątkówych, szczególnie gdy mamy do czynienia z zasobami współdzielonymi, takimi jak liczniki czy listy. Kiedy używasz IronPDF do tworzenia lub manipulowania PDF, integracja Interlocked zapewnia, że operacje pozostają bezpieczne dla wątków i niezawodne.

Używając Interlocked w połączeniu z IronPDF, programiści .NET mogą efektywnie skalować swoje przepływy pracy przetwarzania PDF, utrzymując integralność danych. Niezależnie od tego, czy generujesz raporty, łączysz dokumenty, czy wykonujesz złożone manipulacje PDF w równoległości, Interlocked pomaga utrzymać spójność i unikać warunków wyścigu.

Dzięki tym najlepszym praktykom możesz w pełni wykorzystać możliwości IronPDF i zapewnić, że twoje wielowątkowe przepływy pracy związane z PDF są efektywne i solidne. Gotowy do integracji IronPDF i odkrycia jego potężnych funkcji tworzenia i manipulacji PDF na własnej skórze!

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta