====== 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}}