C-Programmierung – Producer-Consumer Josef Hammer https://www.youtube.com/watch?v=f4NFHU7IcLA Transkript (automatisch erstellt) 0:00 wofür benötigt dieser fokus süchtigen arge hier konnte ich nur bewerben [Musik] heute geht es um charlie unseren kleinen 0:18 schoko elite nager falls euch bekannt vorkommen sollte er war bereits ein statist in mehreren meiner videos kommunikation und er steht insbesondere 0:29 auf duplo davon kann er irgendwie einfach nicht genug bekommen zum glück hat er einen großen bruder nämlich niklas und der versorgt ihn 0:42 immer mit neuen duclos an immer scheint nun wieder sein blog gegessen hat dann ist der teller natürlich leer und erwartet wieder auf niklas jetzt ist es 0:54 allerdings so dass charlie zwar ein extrem um die regionale ist aber er möchte trotzdem nicht ständig hier schauen haye ist da schon etwas ist ja 1:03 schon etwas ist ja schon etwas was macht man doch nur wenn man frisch verliebt ist und auf eine nachricht des partners wartet sondern er möchte sich in 1:13 stattdessen ganz entspannt hinlegen und darauf warten dass in die class ein signal gibt wenn es da wieder etwas zu holen gibt das heißt so bald nix hier 1:27 etwas hingelegt hat wieder für ihn ein neues logo für charlie bereitgestellt hat dann möchte er dass im nieders eine nachricht gibt darauf es gibt wieder was 1:38 sollen diesmal sogar seine lieblingsorte die weißen woher kennen wir das problem was wir hier haben ist ein klassisches wie user kannst ja mal problem wir haben 1:50 einen die user niklas er darauf warten muss dass dieser gemeinsame bereich frei ist damit er etwas hier hinlegen kann und wir haben einen consumer charlie der 2:01 darauf wartet dass hier etwas zu holen ist wir nehmen der einfachheit halber an das ausschließlich ein duplo gleichzeitig ihr platz hat 2:10 den hole ich mir doch gleich das heißt nicht dass es sofort essen muss aber hat sich in zumindest einmal geschnappt damit sofort für nachschub gesorgt 2:19 werden kann die user niklas kann nur etwas hier hinlegen wenn quasi hier nichts ist und dann gibt er bescheid an den consumer 2:32 angeli wer es dann sofort wieder abholen kann charlie wiederum gibt ein signal an niklas hater teller ist er wie er sich 2:42 möchte wieder bitte etwas nachschub und dann gibt es eventuell wieder etwas vom regisseur von niklas in diesem fall ein cocos erscheint das pro user consumer 2:54 problem ist jetzt natürlich nicht nur auf einen pro user oder einen kanzler beschränkt wir können auch auf jeder seite mehrere verwenden wir könnten 3:03 sagen auch urlaub möchte etwas und auch schon glück möchte auch noch etwas davon haben dann würde das an der grundsätzlichen fragestellungen nichts 3:16 ändern einzige unterschied ist dass jetzt 30 dieselbe schoko teilen müssten nur einer der drei kann sich diese schoko schnappen zum beispiel könnte ist 3:26 dass in diesem fall zurück sein und der würde dann ein signal an nicos geben hey wir brauchen nachschub es kann wieder etwas neues hinlegen und in diesem fall 3:38 sagen wir bekommt die benachrichtigung um olaf und urlaub kann sich hier schnappen und schickt seinerseits dann natürlich wieder eine benachrichtigung 3:47 an niklas bitte teller ist leer wir brauchen wieder etwas wie kann man dieses video the consumer problem nun mit condition variablen in der 3:56 programmiersprache c lösen haben wir schon sein wir verwenden hier zwei threads als ein producer ein consumer also niklas und 4:15 charly damit der pro user damit nichts aus überhaupt erst einmal eine schoko hergehen kann muss sie erst einmal sorgen 4:22 charlie hat es einfacher er bekommt hier ein duplo zusätzlich brauchen wir die zustands information für diesen gescherten bereich da haben wir zum 4:32 einen eine bullische variable ist chocolate on trade das heißt wir merken uns ist überhaupt der zeit etwas drauf ist der teller bereits gefüllt und 4:42 natürlich haben wir die tatsächliche schoko auch noch darauf also das was wir eigentlich übergeben möchten wenn wir mit condition variablen arbeiten 4:51 brauchen wir immer einen judex für den zugriff auf den gemeinsamen bereich und hier beim producer consumer problem benötigen wir weiters zwei condition 5:02 variablen zum einen die condition dies signalisiert eben das kartell voll ist das also etwas abgeholt werden kann weiters haben wir die condition mt damit 5:13 signalisiert charlie an niklas also der consumer an dem preview sah dass der teller leer ist und bitteschön etwas nachzufüllen sei im hauptprogramm werden 5:25 diese tags und die condition variable initialisiert und anschließend starten wir die beiden frames der eine führt den code für niklas aus für den producer und 5:38 der zweite für den code für den casino für charlie aus wir dürfen natürlich nicht vergessen bei beendung des programms vorher diese condition 5:48 variablen wieder zu zerstören ebenso wie diese tags was genau macht nun der producer was genau macht niklas die eigentliche produktion erfolgt immer 6:00 außerhalb des kritischen bereichs wenn die kritische bereich soll wie wir wissen ja möglichst kurz sein damit wir möglichst viel an neben läufigkeit 6:10 erreichen können anschließend locken wir die mit ex das heißt wir möchten nun auf diesen gemeinsamen bereich zu greifen dann prüfen wir erst einmal ab 6:21 ist der teller überhaupt leer also so lange der tiger noch befüllt ist also weil dies zu klettern plate solange das der fall ist möchten wir hiermit dieser 6:34 condition variable auf diese komischen variable warten das heißt wir rufen hier peapod konkret auf und sagen wir wollen auf die 6:44 variable condition and i warten das heißt wir warten auf ein signal dass der teller nun leer ist hierüber geben wir auch immer die nude 6:54 ex warum ist das so naja wir müssen im unix besitzen damit wir überhaupt in diesen gemeinsame bereich rein dürfen aber wenn wir warten 7:03 dann wird hier automatisch die simyo ticks wieder freigegeben wäre das nicht der fall dann könnte in der zwischenzeit niemand etwas vom 7:12 teller unternehmen weil wir ja die semiotik blockieren und sobald dieses condition welt zurückkehrt also bald ist ein signal bekommt dann holte sich diese 7:22 musics wieder als es lockt diese musics wieder hier unbedingt immer darauf achten dass sie ein weil verwendet kein normales eve warum ist das nötig es 7:30 könnte zu sogenannten spear ihres make-ups kommen darunter versteht man dass ein brett aufgeweckt wird aber die bedingung trotzdem vielleicht nicht oder 7:39 nicht mehr erfüllt ist es könnte sein dass wir mehrere producer haben und ein anderer producer uns bereits zuvor gekommen ist und der teller somit schon 7:48 wieder gefüllt ist das heißt in diesem fall müssten wir sofort wieder paid content aufrufen und wieder warten jetzt sind ja englischen kritischen bereich 7:57 und wir können loslegen hier machen wir wirklich nur das absolut nötigste auf diesem teller legen wir quasi die schoko ab und wir setzen dann 8:08 noch das flag dass dieser teller nun gefüllt ist dann senden wir mit pete conway ein signal wohin naja an diese condition vollvariable denn wir möchten 8:20 er signalisieren jetzt ist der teller voll und danach geben wir auch schon wieder diese newtec frei wie sie das ganze jetzt für den kummer also für 8:30 charlie aus eigentlich ziemlich identisch sobald die erst einmal dem producer programmiert habt ist der kann so einfach denn ihr 8:38 müsst einfach nur eine kopie davon anfertigen und die logik entsprechend umkehren also im gegensatz zu vorher wo wir sagten weil ist jack white und plate 8:48 interessiert ihn natürlich wann ist quasi dieser teller voll noch nichts da ist dann muss erwarten erwartet natürlich auf conditions sobald wir dann 9:00 hier wieder im kritischen bereich sind machen wir im prinzip genau das gegenteil vom producer nämlich wir holen uns diese schokolade vom teller und wir 9:14 sagen natürlich der teller ist nun leer anschließend nie wieder ein signal in diesem fall denken wir natürlich condition mt denn wir möchten ja nix 9:26 signalisieren also dem producer signalisieren es ist nichts mehr da bitte nachschub und erst wenn wir diese im unix freigegeben haben erst dann 9:34 machen wir den zeitaufwändigen teil nämlich in diesem fall ist es so bleibt dann finden wir das doch gleich mal aus 9:46 wir sehen sobald hier quasi diese giving chocolate zeile auftaucht folgt unmittelbar auch diese eating zeile das heißt unabhängig davon wie lange quasi 10:02 niklas benötigt um eine neue schokolade zu besorgen charlie bekommt sofort die notification und kann unmittelbar reagieren das können wir uns auch 10:12 vielleicht in einer zweiten shell ansehen wie viel cpu das überhaupt benötigt 0,0 also praktisch gar nichts in diesem zeitraum zwischen diesen 10:25 zeilen der konsum macht in diesem zeitraum nichts denn erwartet nur auf dieses signal und bisher diese signale bekommt kann er sich im prinzip schlafen 10:34 legen und das ist ja genau das was wir wollen wir möchten keine cpu zeit sinnlos verheizt 10:40 die spannende frage ist jetzt natürlich wie sieht es aus wenn ich nicht nur und nur einen kanzler habe sondern wenn ich mehrere davon habe also wenn es 10:50 nicht nur charlie gibt sondern auch noch urlaub und auch noch jean-luc das schöne daran ist es ändert sich eigentlich fast gar nichts im kot es gibt hier 11:00 eigentlich nur zwei stellen wo wir etwas ändern müssen das eine ist hier die anzahl der fritz erhöhen also die höhen hier vier fritz ein producer drei 11:09 consumer und diese müssen natürlich auch gestartet werden das machen wir am besten in einer schleife damit wären dann allerdings unsere 11:22 consumer ein wenig unterscheiden können geben wir hier in eat dog let zusätzlich noch die freddy aus 11:34 kontrollieren das wieder und wir sehen nun dieser frist ein anderer consumer als dieser hier als diese hier wichtig mehr als einen pro user haben ist es 11:51 genau dasselbe wir sehen also dass pro user consumer problem lässt sich mit konditions variablen sehr sehr einfach lösen 11:58 vielen dank fürs zuschauen viel erfolg pickering und [Musik]