GNU/Linux >> Linux Esercitazione >  >> Linux

C++ nuovo operatore thread safety in linux e gcc 4

Generalmente il new operator è thread-safe - tuttavia le garanzie di sicurezza del thread per le chiamate nell'STL e nella libreria standard sono regolate dallo standard - questo non significa che non siano a conoscenza del thread - tendono ad avere garanzie molto ben definite di sicurezza del thread per determinate operazioni. Ad esempio, l'iterazione di un elenco in modalità di sola lettura è thread-safe per più lettori, mentre l'iterazione di un elenco e l'esecuzione di aggiornamenti non lo sono. Devi leggere la documentazione e vedere quali sono le varie garanzie, anche se non sono così onerose e tendono ad avere un senso.


Mentre sto parlando di concetti che non ho usato, sento di dover menzionare che se stai usando la memoria condivisa, allora probabilmente vorrai assicurarti di usare solo i tipi POD e usare il nuovo posizionamento.

In secondo luogo, se stai utilizzando la memoria condivisa come è comunemente inteso sui sistemi Linux, potresti utilizzare più processi, non thread, per allocare memoria e "fare cose", utilizzando la memoria condivisa come livello di comunicazione. Se questo è il caso, la sicurezza del thread della tua applicazione e delle tue librerie non è importante - ciò che è importante, tuttavia, è la sicurezza del thread di qualsiasi cosa utilizzi l'allocazione di memoria condivisa! Questa è una situazione diversa rispetto all'esecuzione di un processo con molti thread, nel qual caso chiedere informazioni sulla sicurezza dei thread dell'operatore new È una preoccupazione valida e potrebbe essere affrontata posizionando new se non lo è, o definendo i propri allocatori.


Dovrai cercare molto attentamente per trovare una piattaforma che supporti i thread ma non abbia un thread safe new . Infatti, la thread safety di new (e malloc ) è uno dei motivi per cui è così lento.

Se invece desideri un STL thread-safe, puoi prendere in considerazione Intel TBB che dispone di contenitori thread-aware (sebbene non tutte le operazioni su di essi siano thread-safe).


Linux
  1. WaitForSingleObject e WaitForMultipleObjects equivalenti in Linux?

  2. C++ su Linux non riconosce comandi come exit() e printf()

  3. Compilazione C++ su Windows e Linux:ifdef switch

  4. Imposta la data e l'ora del sistema usando C++ in Linux

  5. Come compilare codice Windows Visual C++ su Linux

Rilasciato Linux Mint 19.2 "Tina":ecco cosa c'è di nuovo e come ottenerlo

Linux Kernel 5.9:Novità e come eseguire l'aggiornamento

Come compilare C, C++ e Java utilizzando Terminal su Linux

Come compilare ed eseguire programmi C, C++ in Linux

Come creare e gestire nuovi utenti su Linux

Come installare e utilizzare il compilatore GCC su sistema Linux