====== Threads in C auf Linux ====== Feb. 2021 Die C Standard-Bibliothek beinhaltet kaum Funktionen, um mit dem Betriebssystem komplexere Sachen anzustellen. Hier ein einfaches Beispiel, um paralleles Ausführen von Programmteilen zu ermöglichen: #include #include #include #include volatile int x=0; void* timer_1s(void *vargp){ for(int i=0; i<10; i++){ sleep(1); // wait 1s printf("1s-Tick\n"); x++; } return NULL; } void* timer_2s(void *vargp){ for(int i=0; i<5; i++){ sleep(2); printf("2s-Tick, t=%ds\n", x); } return NULL; } int main(){ pthread_t thread_1 = 0; pthread_t thread_2 = 0; printf("Wir starten nun beide Timer:\n"); pthread_create(&thread_1, NULL, timer_1s, NULL); pthread_create(&thread_2, NULL, timer_2s, NULL); pthread_join(thread_1, NULL); pthread_join(thread_2, NULL); printf("Wir sind nun fertig mit dem Programm, tschüss!\n"); return 0; } Komplieren und ausführen: gcc thread.c -Wall -lpthread ./a.out Ausgabe Wir starten nun beide Timer: 1s-Tick 2s-Tick, t=1s 1s-Tick 1s-Tick 2s-Tick, t=3s 1s-Tick 1s-Tick 2s-Tick, t=5s 1s-Tick 1s-Tick 2s-Tick, t=7s 1s-Tick 1s-Tick 2s-Tick, t=9s 1s-Tick Wir sind nun fertig mit dem Programm, tschüss! Zu bemerken ist, dass der Heap-Speicher von beiden Threads gleichermaßen benutzt werden kann (siehe Variable ''x''). Ebenso die Stanardausgabe mittels ''printf()''. Würde in einer HTL so einfachen Code lehren, wäre C sicherlich gleich um vieles attraktiver. Doch dort behandelt man max. die Standard C-Lib, mit der man nur müßig etwas umsetzen kann, und schnell an einfachen Anforderungen scheitert. ===== Links ===== * Viele Linux/Posix Features werden [[https://www.youtube.com/watch?v=6OSeJFo6GOc|hier auf Youtube]] vorgestellt, wobei es [[https://www.youtube.com/watch?v=6OSeJFo6GOc&t=11734s|hier um Threas geht]]. * Beim Raspberry hab ich auf die POSIX Funktionen schon einmal verwiesen: [[raspberry#posix_on_linux]] {{tag> linux c programming deutsch}}