Frozen Code
Frozen Code
  • 25
  • 9 351
Multithreading: Mit Mutex lock und unlock und Signalen arbeiten (C-Programmierkurs)
Im dritten Teil zum Thema Multithreading möchte ich euch erklären, wie man Data Races und Race Conditions verhindert, indem man nicht-atomare Operationen mit Mutexen schützt. Dazu nutzen wir die pthread-Bibliothek.
Außerdem erfahrt ihr, wie ihr Signale senden und auf diese warten könnt, um busy waiting zu vermeiden.
Wir arbeiten wieder auf Ubuntu Linux.
Link zum vorherigen Video (Einführung in pthreads):
th-cam.com/video/q1O63g53vFw/w-d-xo.html
Link zum Programmcode:
github.com/eispalast/frozencode/tree/main/threads2
Timestamps:
0:00 Intro
0:15 Einfaches Beispiel (seriell)
1:38 Umschreiben in multithreaded
2:41 Einschub Data Races
3:54 geschützte Bereiche definieren (mutex (un)lock)
6:00 Synchronisierung
11:19 Arbeiten mit Timeout (pthread_cond_timedwait)
มุมมอง: 300

วีดีโอ

Multithreading: Einführung in die pthread-Bibliothek [C-Einsteigerkurs]
มุมมอง 15421 วันที่ผ่านมา
In diesem Video möchte ich euch die phtread-Bibliothek näher bringen. Wir lernen, wie man mehrere Threads parallel ausführen kann und wie man mit pthread_join auf die Abarbeitung von Threads warten kann. Außerdem zeige ich, wie man die void-Pointer nutzen kann um Parameter an die Funktionen zu übergeben und Rückgabewerte zu speichern. Wir arbeiten wieder mit unserer Entwicklungsumgebung unter U...
Multithreading: Prozesse mit fork() klonen [C-Einsteigerkurs]
มุมมอง 117หลายเดือนก่อน
In diesem Video gebe ich euch einen Einstieg in die Welt des Multithreadings. Konkret geht es dabei darum, wie man mit fork einen Kindprozess erzeugt und auf diesen wieder mit waitpid() wartet. Wir arbeiten wieder mit unserer Entwicklungsumgebung unter Ubuntu Linux. Wenn ihr mitmachen wollt, dann könnt ihr die genutzten Dateien unter folgendem Link herunterladen: github.com/eispalast/frozencode...
Im Programm Dateien lesen und schreiben [C-Einsteigerkurs]
มุมมอง 3512 หลายเดือนก่อน
In diesem Video möchte ich euch beibringen, wie ihr in selbst geschriebenen Programmen in der Programmiersprache C Dateien von der Festplatte oder SSD einlesen und schreiben könnt. Dafür nutzen wir die Funktionen fprintf, fwrite, fread, fgets und fscanf. Wir nutzen natürlich wieder unsere Entwicklungsumgebung unter Ubuntu. Wenn ihr selbst mitmachen wollt, dann könnt ihr alle benötigten Vorlagen...
Programme mit "make" kompilieren - Schritt für Schritt zum soliden Makefile [C-Einsteigerkurs]
มุมมอง 2312 หลายเดือนก่อน
In diesem Video zeige ich euch, wie ihr mit GNU make verschiedenste Programme kompilieren könnt. Dabei zeige ich, wie ihr in einem Makefile Targets erstellt und diese mit automatischen Variablen und Platzhaltern für eine Vielzahl von Quelltextdateien nutzen könnt. Wir arbeiten wieder mit der Entwicklungsumgebung unter Ubuntu, so wie wir sie am Anfang des Programmierkurses eingerichtet haben. Li...
Programmcode in mehrere Dateien aufteilen [C-Einsteigerkurs]
มุมมอง 2282 หลายเดือนก่อน
In diesem Tutorial lernt ihr, wie ihr in der Programmiersprache C euren Programmcode in mehrere .c-Dateien aufteilen und so euer Programm modularisieren könnt, damit ihr diesen Code einfach in mehreren Projekten verwenden könnt und damit sich eure Compilezeiten verringern können. Außerdem behaltet ihr bei gut organisiertem und strukturierten Code auch in großen Projekten noch die Übersicht. Wir...
Was macht der Präprozessor? [C-Einsteigerkurs]
มุมมอง 963 หลายเดือนก่อน
Es geht weiter mit unserem kleinen C-Einsteigerkurs. Heute schauen wir uns an, was der Präprozessor ist und was er macht. Ihr könnt wie immer bei diesem Tutorial einfach mitmachen. Wir arbeiten immernoch mit der gleichen Entwicklungsumgebung unter Ubuntu Linux, die wir am Anfang des Einsteigerkurses eingerichtet haben. Weiter Infos zu Präprozessordirektiven: codeforwin.org/c-programming/c-prepr...
Nutze Neovim als Debugger für deinen C-Code
มุมมอง 229ปีที่แล้ว
In diesem Video zeige ich euch, wie ihr das vim-plugin "vimspector" installieren und einrichten könnt. Damit kann Programmcode einfach und übersichtlich in (neo)vim debuggt und so Fehler gefunden werden. Links: Vimspector: github.com/puremourning/vimspector Packer: github.com/wbthomason/packer.nvim Frozen Code Discord: discord.gg/fXXtaySdTe Meine Konfigurationsfiles: github.com/eispalast/dotfil...
Was sind Variablen und Datentypen? [C-Kurs Kapitel 6]
มุมมอง 508ปีที่แล้ว
Was sind Variablen und Datentypen? [C-Kurs Kapitel 6]
Ubuntu Linux installieren (VM, WSL) [C-Kurs Kapitel 2]
มุมมอง 918ปีที่แล้ว
Ubuntu Linux installieren (VM, WSL) [C-Kurs Kapitel 2]
Editoren und Compiler installieren [C-Kurs Kapitel 4]
มุมมอง 637ปีที่แล้ว
Editoren und Compiler installieren [C-Kurs Kapitel 4]
For- und While-Schleifen [C-Kurs Kapitel 10]
มุมมอง 205ปีที่แล้ว
For- und While-Schleifen [C-Kurs Kapitel 10]
Bedingte Codeausführung und boolsche Verknüpfungen [C-Kurs Kapitel 9]
มุมมอง 294ปีที่แล้ว
Bedingte Codeausführung und boolsche Verknüpfungen [C-Kurs Kapitel 9]
Eigenen Funktionen schreiben [C-Kurs Kapitel 12]
มุมมอง 307ปีที่แล้ว
Eigenen Funktionen schreiben [C-Kurs Kapitel 12]
Dynamische Speicherverwaltung mit malloc [C-Kurs Kapitel 13]
มุมมอง 354ปีที่แล้ว
Dynamische Speicherverwaltung mit malloc [C-Kurs Kapitel 13]
Bitweise Operationen [C-Kurs Kapitel 16]
มุมมอง 123ปีที่แล้ว
Bitweise Operationen [C-Kurs Kapitel 16]
Chars und "Strings" [C-Kurs Kapitel 14]
มุมมอง 170ปีที่แล้ว
Chars und "Strings" [C-Kurs Kapitel 14]
Zusammengesetzte Datentypen mit Structs [C-Kurs Kapitel 7]
มุมมอง 500ปีที่แล้ว
Zusammengesetzte Datentypen mit Structs [C-Kurs Kapitel 7]
Fehler finden und beheben (mit valgrind und gdb) [C-Kurs Kapitel 17]
มุมมอง 240ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst du welche Techniken du nutzen kannst um Fehler und Bugs in deinem Programmcode zu finden um diese dann zu beheben. Dazu nutzen wir die Programme valgrind und gdb. Du kannst alles Schritt für Schritt mitmachen und brauchst weder speziel...
Hello World! [C-Kurs Kapitel 5]
มุมมอง 613ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst du das erste eigene C-Programm zu schreiben, zu kompilieren und es auszuführen. Es ist zwar "nur" ein einfaches "Hello World"-Programm, aber damit ist der Grundstein zu vielen tollen anderen Programmen gelegt. Du kannst alles Schritt f...
Adressen und Pointer [C-Kurs Kapitel 11]
มุมมอง 454ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst du was Pointer und Adressen im Kontext der Programmierung mit C sind. Dieses Kapitel ist sehr wichtig um den Schritten in den zwei nächsten Kapiteln zu folgen. Du kannst alles Schritt für Schritt mitmachen und brauchst weder spezielle ...
Arrays [C-Kurs Kapitel 8]
มุมมอง 327ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst du was Arrays sind, wie man damit umgeht und worauf man bei der Benutzung besonders achten muss. Du kannst alles Schritt für Schritt mitmachen und brauchst weder spezielle Hardware noch Vorkenntnisse. Links: Meine Konfigurationsfiles: ...
Die wichtigsten Terminal-Befehle [C-Kurs Kapitel 3]
มุมมอง 687ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst einfache Befehle mit der Kommandozeile von Linux und du lernst, wie du die "man-pages" nutzen kannst um weitere hilfreiche Informationen zu diesen Befehlen bekommen. Du kannst alles Schritt für Schritt mitmachen und brauchst weder spez...
So nutzt du Kommandozeilenparameter [C-Kurs Kapitel 15]
มุมมอง 240ปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren mit C lernen möchtest, hier bist du genau richtig. In diesem Kapitel lernst du wie du in deinem Programm Kommandozeilenparameter nutzen kannst und welche Fallstricke beachtet werden müssen. Außerdem lernst du, wie man Zahlen aus Strings in Zahlen als Integer umwandeln kann. Du kannst alles Schritt für Schritt ...
C-Kurs für Einsteiger [C-Kurs Kapitel 1]
มุมมอง 1.1Kปีที่แล้ว
Egal ob du auch an der TU Berlin studierst oder du einfach nur für dich programmieren lernen möchtest, hier bist du richtig. In diesem Kurs lernst du die ersten Schritte, vom installieren aller nötigen Programme, über dein erstes "Hello World"-Programm bis hin zu dynamischer Speicherverwaltung und dem Debugging. Du kannst alles Schritt für Schritt mitmachen und brauchst weder spezielle Hardware...

ความคิดเห็น

  • @polarbear6451
    @polarbear6451 หลายเดือนก่อน

    Kurze Frage: bei strcpy(str3, str1, 13), muss man 13 auch eingeben? bei mir wurde so gezeigt : zu viele Argumente im Funktionsaufruf wenn ich 13 weglasse, dann ist diese Warnung weg.

    • @frozencode1
      @frozencode1 หลายเดือนก่อน

      Genau, bei strcpy (also ohne 'n') gibt man nicht an, wie viele Zeichen kopiert werden sollen. Die Funktion kopiert einfach so viele Zeichen, wie der Source-String lang ist. Ich empfehle dir aber immer die Funktion strncpy (also mit 'n') zu benutzen, da du damit limitieren kannst, wie viele Zeichen kopiert werden sollen. Es sollen natürlich immer nur maximal so viele kopiert werden, wie Speicherplatz im Ziel-String zur Verfügung steht.

  • @jojo-nh3yj
    @jojo-nh3yj 2 หลายเดือนก่อน

    Sehr cooles Video danke für die Einführung in "make" :)

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Gerne, freut mich, dass es dir geholfen hat :)

  • @polarbear6451
    @polarbear6451 2 หลายเดือนก่อน

    ich benutze MacOs und wenn ich ctrl+Z drücke, ist es automatisch suspended. obwohl ich auch 'bg' benutzt habe, trotzdem automatisch suspended. Wie löst man diese Problem?

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Hallo, Ich fürchte, ich verstehe dein Problem nicht so ganz. Ich vermute, dass du Bezug nimmst auf die Stelle bei 7:40. Dass das Programm im Vordergrund, hier neovim, beim Drücken der Tastenkombination Ctrl-Z suspended wird ist genau so gewünscht. Mit dem Befehl fg "%nvim" kann das Programm wieder in den Vordergrund geholt werden. Möglicherweise ist das auf MacOS eine andere Tastenkombination, aber eigentlich sollte das Verhalten gleichen sein. Welches Verhalten erwartest du denn? Was ist der genaue Output deines Terminals? Welchen Editor benutzt du? Falls du jetzt gerade nicht weiter kommst kannst du als Workaround auch einfach den Ordner in einem zweiten Terminal öffnen und dort die Kompilierbefehle eingeben.

    • @polarbear6451
      @polarbear6451 2 หลายเดือนก่อน

      @@frozencode1 also es wird suspended gezeigt, [1] + continued nvim hello_world.c zsh: suspended nvim hello_world.c und dann funktioniert bei mir Befehl clang hello_world.c -o hello_world leider nicht. Es steht Error (_main) irgendwie so was. Ich habe schon mehr mal korrigiert und sogar von vorne noch mal angefangen, hat es troztdem nicht funktioniert. Ich habe dann durch tmux benutzt. Es hat funktioniert *gerade habe ich noch mal probiert, also hat es doch funktioniert. Aber, dass es auch Fehler zeigt, was in Programm fällt, kriege ich noch nicht.

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Dass dort "zsh: suspended nvim hello_world.c" steht ist genau so gewollt. Das sieht ein bisschen anders aus als bei mir im Video, weil ich dort eine andere shell benutze (bash) als du (zsh), deren Output sich da etwas unterscheidet. Das ist also kein Problem. Doofe Frage, aber hast du die C-Datei gespeichert, bevor du versucht hast sie zu kompilieren? Das würde erklären, warum keine main-Funktion gefunden werden kann.

    • @polarbear6451
      @polarbear6451 2 หลายเดือนก่อน

      @@frozencode1 ja ich habe :w benutzt bevor ich ctrl + z benutze

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Okay, das ist gut. Wenn du magst, kannst du auf meinen Discord-Server kommen (Link ist in der Kanalbeschreibung) und mich da anschreiben. Dann könntest du mir auch Screenshots schicken und dann lösen wir das Problem bestimmt.

  • @lloydbush
    @lloydbush 2 หลายเดือนก่อน

    Super erklärt, super Struktur, weiter so!

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Danke für die netten Worte 😊

  • @IliaKhabardin
    @IliaKhabardin 2 หลายเดือนก่อน

    like your vim config

    • @frozencode1
      @frozencode1 2 หลายเดือนก่อน

      Thanks! If you want to copy it (or parts of it) you can check it out at my github: github.com/eispalast/dotfiles/

  • @hollanderson
    @hollanderson 3 หลายเดือนก่อน

    Danke für den kurs :)

    • @frozencode1
      @frozencode1 3 หลายเดือนก่อน

      Freut mich sehr , dass er dir gefällt :)

  • @hollanderson
    @hollanderson 3 หลายเดือนก่อน

    Das F12 ist super nice. Danke :)

  • @hollanderson
    @hollanderson 3 หลายเดือนก่อน

    notize: player p2_pla={{'b',2},90}; printf("P2: x: %c y: %d s: %d ", p2_pla.pos.x, p2_pla.pos.y, p2_pla.s);

  • @hollanderson
    @hollanderson 3 หลายเดือนก่อน

    11:45 Habe die Version 7.0.14 VM box mit dieser extension heruntergeladen, und bei der ubuntu installation die komplette version gemacht, aber da ist keine CD symbol mit VBox_Gas installation an der linken Seite.

    • @frozencode1
      @frozencode1 3 หลายเดือนก่อน

      Prüf nochmal, ob du das gemacht hast, was ich bei ca 10:30 gemacht habe. Da habe ich oben in der Leiste auf "Geräte" geklickt und dann "Gasterweiterung einlegen". Dadurch wird diese Virtuelle CD erst in der VM sichtbar.

    • @hollanderson
      @hollanderson 3 หลายเดือนก่อน

      @@frozencode1 Leider habe ich immer noch Probleme mit der Installation und habe es bereits mehrfach versucht. Überall im log gibt es Kompatibilitätsprobleme, und andere Versions probleme. Es hilft auch nicht wenn man fast gar nichts auf dem bildschirm sehen kann. Im Moment habe ich eine ältere Version von vmbox und Ubuntu verwendet und die automatische Installation 04:40 genutzt und alles funktioniert im moment. Ich hoffe, dass das später nicht zum Problem wird. Edit: habe auch resolution auf 16:9 format gestellt, und die sprache geaendert

    • @frozencode1
      @frozencode1 3 หลายเดือนก่อน

      @@hollanderson Das ist natürlich unschön, dass es nicht wie gezeigt funktioniert hat. Die Inhalte aus diesem Kurs sollten aber auch alle mit älteren Versionen kompatibel sein, da der Kurs vor allem Basics behandelt, die sich im Grunde seit vielen Jahren nicht geändert haben. Viel Erfolg weiterhin!

  • @zuhair7358
    @zuhair7358 8 หลายเดือนก่อน

    Hallo lieber Frozen Code, Deine Tutorials haben mir sehr geholfen. Vor allem, weil TU Berlin keine Versäumnisse erlaubt, ich aber ein Sterbefall in der Familie hatte, weshalb ich off war. Ehrenmann Steht das Angebot noch, in dein Discord Server zu kommen? Oder zumindest ein Insta? Hätte zu einigen Aufgabe noch Fragen Der Discord Link ist abgelaufen.

    • @frozencode1
      @frozencode1 8 หลายเดือนก่อน

      Hallo, vielen Dank für deine lieben Worte und mein Beileid zu deinem Sterbefall. Ich habe den Link zum Discord gerade nochmal getestet und bei mir scheint er eigentlich zu funktionieren. In den letzten Wochen sind darüber auch ein paar Menschen auf dem Discord gelandet. Hier ist noch ein alternativer Link, vielleicht funktioniert der: discord.gg/uvQVZsseAJ

  • @MiniDinkel
    @MiniDinkel 9 หลายเดือนก่อน

    Hi, könntest du bitte nochmal die Bedeutung von void erklären? Eine void-Funktion soll ja keine berechneten Daten oder Ergebnisse zurückgeben. Aber in 13:18 gibt die void-Funktion doch den Wert k=8 durch die Berechnung von k=k+2 zurück oder? Hätte man demnach nicht auch int als Datentyp verwenden können?

    • @frozencode1
      @frozencode1 8 หลายเดือนก่อน

      Hi, die void-Funktion gibt nicht den Wert k=8 zurück. Die Funktion gibt tatsächlich gar nichts zurück, da sie ja gar nicht das Schlüsselwort "return" enthält. In der Zeile, in der add_two aufgerufen wird, wird auch kein Ergebnis einer Variable zugewiesen, so wie es in der Zeile "int z=add_one(y);" der Fall ist. Dort wird tatsächlich von der Funktion ein Wert returned (also zurückgegeben) und in einer Variable gespeichert. Man hätte bei der add_two-Funktion natürlich auch eine Rückgabe einbauen können, wenn man den Rückgabetyp als integer definiert hätte. In diesem Beispiel ging es aber eben darum, dass die Berechnung trotzdem durchgeführt wird und der Wert der übergebenen Variable in der Funktion direkt verändert werden kann, wenn man die Adresse auf diese Variable übergibt, also das "Call-by-reference"-Prinzip nutzt.

  • @MiniDinkel
    @MiniDinkel 9 หลายเดือนก่อน

    Hello, danke für die Erklärung! Vielleicht nicht ganz relevant zu Pointern und Adressen, aber wozu hast du in den runden Klammern der main Funktion "int argc, char *argv [ ]" geschrieben? Und könntest du bitte auch erklären, wann man return 0 verwenden soll und wieso es relevant ist? Ich hab experimentell return 0 einfach mal ausgelassen. Als ich das Programm laufen lies, schien es keinen Unterschied zu geben. Laut Recherche soll Return 0 eine Erfolgsmeldung an die main(?) senden. Aber ich verstehe leider nicht ganz, wozu das nötig sein sollte... 🤔

    • @frozencode1
      @frozencode1 8 หลายเดือนก่อน

      Hi, entschuldige die späte Antwort, vielleicht hast du sogar mittlerweile die Antworten auf deine Fragen bekommen. Das mit dem "int argc, char * argv[]" wird noch in Kapitel 15 genau beschrieben. Per Konvention ist es so, dass ein Programm, da erfolgreich seine Aufgaben erfüllt hat, als return-Wert eine 0 zurückgibt. Dadurch kann ein anderes Programm, da wiederum dein Programm aufgerufen hat, feststellen, ob alles gut gelaufen ist. Dieses aufrufende Programm kann zum Beispiel dein Terminal sein. Dieses fängt die Rückgabewerte der aufgerufenen Programme ab und könnte zum Beispiel auch den Returnwert auf dem Bildschirm ausgeben. Falls dein Programm einen Fehler feststellt, zum Beispiel weil der Speicher voll ist, eine Usereingabe fehlerhaft war o.ä., dann sollte ein anderer Returnwert zurückgegeben werden. Man kann sogar für verschiedene Fehlertypen unterschiedliche Werte returnen. Du kannst dann in die Dokumentation deines Programmes schreiben, welche Fehlertypen welchen Wert returnen. Wenn nun jemand anderes dein Programm nutzt, dann kann diese Person im Falle eines Fehlers anhand des Rückgabewert deines Programmes erkennen, was schief gelaufen ist.

  • @MiniDinkel
    @MiniDinkel 9 หลายเดือนก่อน

    Hi, erstmal danke für das hilfreiche Video! :) Woher weiß das Terminal in 17:23 denn, ob es y=y/2 oder y=23%4 ausführen soll? Weist man dadurch dem y nicht 2 Werte zu? Bzw.: werden dann nicht beide Werte, also 8 und 6 in den Speicherblöcken abgespeichert?

    • @frozencode1
      @frozencode1 9 หลายเดือนก่อน

      Hi, Wenn man einer Variable mehrfach hintereinander einen Wert zuweist, dann wird der vorherige Wert tatsächlich überschrieben, man kann also immer nur auf den zuletzt zugewiesenen Wert zugreifen. Der vorherige Wert ist dann verloren.

    • @MiniDinkel
      @MiniDinkel 9 หลายเดือนก่อน

      Dankeschön! @@frozencode1

  • @zuhair7358
    @zuhair7358 9 หลายเดือนก่อน

    Lebensretter!

  • @ThomasPoth
    @ThomasPoth 11 หลายเดือนก่อน

    Hi, tolle Qualität. Der Kurs braucht Reichweite 🙂

    • @frozencode1
      @frozencode1 11 หลายเดือนก่อน

      Das freut mich zu hören! :)

  • @3xrd965
    @3xrd965 ปีที่แล้ว

    Danke für die tollen Tutorials! Ich muss SysProg belegen, ohne vorher einen Programmier-Kurs gehabt zu haben. Deine Tutorials helfen mir sehr!

    • @frozencode1
      @frozencode1 ปีที่แล้ว

      Hey danke, das freut mich sehr 😊 viel Erfolg bei SysProg!

  • @roadto1m306
    @roadto1m306 ปีที่แล้ว

    Danke (: