Sobes.tech
Junior

Ce este concurența în contextul multitreading-ului?

sobes.tech AI

Răspuns de la AI

Concurența este capacitatea unui sistem de a executa mai multe sarcini simultan, care pot împărți resurse comune. În contextul multitreading-ului, acest lucru se realizează prin lansarea mai multor fire de execuție, fiecare putând procesa propria sarcină.

Exemple de mecanisme care ating concurența în C#:

  • Clasa Thread: Crearea și gestionarea directă a firelor de execuție.
    // Crearea unui nou fir de execuție
    Thread newThread = new Thread(() => {
        // Cod care rulează în noul fir
    });
    newThread.Start(); // Pornirea firului
    
  • Pool de fire de execuție (ThreadPool): Reutilizarea firelor pentru reducerea costurilor de creare și distrugere.
    // Plasarea unei sarcini în pool-ul de fire
    ThreadPool.QueueUserWorkItem((state) => {
        // Cod care rulează într-un fir din pool
    });
    
  • Sarcini (Task): O abstracție de nivel superior peste fire, parte a Task Parallel Library (TPL). Mai convenabil pentru operațiuni asincrone.
    // Crearea și lansarea unei sarcini
    Task.Run(() => {
        // Cod care rulează în sarcină
    });
    

Concurența poate duce la probleme la accesarea datelor comune (condiții de cursă, blocaje), necesitând utilizarea mecanismelor de sincronizare precum:

  • lock
  • Mutex
  • Semaphore
  • Monitor