2009-04-21 16 views
5

Nella mia copia di C Programming Language (p.es.: K & R), non sembra esserci menzione del multithreading. Il libro è meno completo di quanto immaginassi? Il multithreading è emerso dopo che è stato scritto? Sto pensando a questo nel modo sbagliato?origine multi-thread C

Dove si inserisce il concetto di multithreading nel mondo C?


Edit: Credo che la mia domanda iniziale sono stati:

  • si può scrivere nulla in C
  • multithreading esiste
  • non si può scrivere multithreading in C <-logica contraddizione

Che cosa spiega questa contraddizione? Dov'è l'origine del multithreading? Se POSIX, cosa è scritto in POSIX se non C? Una forma di assemblaggio inaccessibile a C?

+0

Il multithreading non fa parte del linguaggio C. Può essere aggiunto da librerie di terze parti, ovviamente, ma il linguaggio C non ha il concetto di threading. – jalf

+0

@jalf in realtà c'è un thread nello standard C11, hanno dovuto aggiungerlo in modo che potessero definire il modello di memoria, ma la maggior parte del materiale di supporto è ancora nella libreria standard. – Spudd86

+0

Nota che il mio commento è del 2009;) – jalf

risposta

14

C è un linguaggio di basso livello. Il supporto per i thread in un tipico programma C proviene dal sistema operativo, non dal runtime C: se il proprio ambiente non supporta i thread, sarà necessario implementarli da soli, trovare una libreria che lo faccia o fare senza i thread. Ciò è in contrasto con un linguaggio come Java, in cui l'ambiente runtime fornisce molti servizi che sono garantiti per essere disponibili per i programmi Java indipendentemente dal fatto che il sistema operativo sottostante li supporti nel modo in cui la piattaforma Java espone.

Ora, detto questo, sono abbastanza sicuro che quando è stata pubblicata la prima edizione di K & R, Unix non supportava i thread. Poiché C è stato implementato per la prima volta come linguaggio di sistema per l'ambiente Unix, non sorprende il fatto che non abbia supporto per il thread nativo.

Se si scrive codice per un Unix come l'ambiente, cercare thread POSIX, se avete bisogno di un API ben supportato per l'attuazione di programmi multithreaded in C.

4

Il libro è completo. C è in grado di eseguire thread, ma solo con il supporto del run-time in cui si trova. C non supporta molte cose in modo nativo. Ad esempio, se vuoi aprire un file o ricevere input dal mouse, avrai bisogno di una libreria che ti dia quel supporto. Questo è buono in un certo senso perché significa che C può girare su un piccolo computer embedded e non ha bisogno di molta memoria per le funzioni che potresti o non vorrai.

Multithreading è stato di circa modo prima C. (Questo è in base a questo: http://www.cs.clemson.edu/~mark/multithreading.html)

Hai bisogno di un libreria di threading. Ad esempio, in Windows è possibile:

#include "Windows.h" 

int main() 
{ 
    CreateThread(/*Google the function for details of the parameters.*/); 
    return 0; 
} 

avrete bisogno di scaricare l'SDK piattaforma Windows per farlo. La maggior parte delle piattaforme ha una sorta di sdk che avrà una libreria con alcune funzioni per la creazione di thread. La maggior parte ha una funzione di stile CreateThread, in cui si passa l'indirizzo di una funzione in cui si desidera che il thread appena iniziato inizi a essere eseguito parallelamente al thread corrente avviato sulla funzione principale.

Una libreria di threading standard che si desidera cercare è posix.

3

Se ricordo correttamente, il multithreading è entrato in uso comune molto più tardi del linguaggio di programmazione C. La libreria POSIX Threads è il modo tipico per eseguire il multithreading in un programma Unix/Linux e non fa parte della libreria standard.

+0

La cosa meravigliosa degli standard è che ce ne sono così tanti tra cui scegliere. I fili non fanno parte di ISO C (ISO/IEC 9899: 1999); I thread POSIX fanno parte di POSIX (ISO/IEC 9945-1: 2003 - sebbene lo standard POSIX sia IEEE 1003.1-2008). –

1

Il multithreading (o multiprocessing) è sicuramente emerso prima di questo. Tuttavia, il supporto al multithreading in un linguaggio di programmazione è ancora scarso, in particolare C non ne ha. Quindi penso che dovresti leggere un libro su es. I thread POSIX, o qualsiasi thread che supporti il ​​tuo ambiente, ti dà (le librerie di threading sono molto simili tra loro al giorno d'oggi, almeno nei principi delle loro primitive di sincronizzazione: cose strane come RCU sono usate solo in ambienti specifici).

1

Lo fa menzione sulla mia copia (2 ° edizione), nel capitolo Introduzione (. P 2):

Allo stesso modo, C offre solo semplice, flusso di controllo single-thread: test, loops, il raggruppamento e sottoprogrammi, ma non multiprogrammazione, operazioni parallele, sincronizzazione o coroutine.

2

I linguaggi C e C++ non includevano librerie di threading incorporate. Quindi, diverse piattaforme avevano diversi paradigmi per i thread (PThreads, la funzione CreateThread di WinAPI (..), i thread MFC, ecc.).

C++ 0x will include a standard thread library, sembra.