Re: Deadlock Kategorie: Programmierung (von André H. - 31.08.2002 8:33) | |
Als Antwort auf Re: Deadlock von Mario Fischer - 31.08.2002 1:53
| |
Hallo Mario, > Das duerfte EINIGES erklaeren! > Zusammen mit der hwcom hatte ich schon so oft Aerger, das sich die CC2 aufhaengt. > Warum steht nicht im Handbuch "keine verschachtelten captures.", oder habve ich es ueberlesen? > Falls es wirklich nicht drin steht, woher weist du es? Zu einem steht's im Handbuch auf Seite 80 und zu anderem im Archiv des alten C-Control-Center-Forums(unter Foren) Beitrag:"Probleme mit der Synchronisation von Threads - Sprotto 04.1.2001 17:12". > > > Die Lösung: Ein "Software"-Capture. > > Die Prio der Threads sollte aber nicht kleiner 15 sein. > > das ist doch vom Prinzip Polling, oder? > Der Eine setzt ein Flag und der Andere schaut staendig nach. Genauso mach es capture/release auch. Eben nur Atomar. > Ist das nicht 1. Threadunsicher (steht doch auch sowas im Handbuch S.79 oben) und 2. wenn schon so, nicht etwas performanter mit wait zu machen? > Oder ging es dir nur um die Demonstration? Nein, unsicher ist das nicht. Durch den Einsatz von "yield" wird es sehr sicher, da alles innerhalb von loop ohne Unterbrechung(Threadwechsel) ausgeführt wird. Ich verwende das "SW-Capture" schon mehrfach ohne Probleme. Ein loop ist mir lieber als wait, da ich ganau wei� was der thread macht. Mit wait würde das so aussehen: yield; // sehr wichtig wait file_lock==0 file_lock=255; Das yield; darf nicht vergessen werden, da, soviel ich wei�, bei wait ein "yield" erst nach der Prüfung stattfindet. Das wait sieht intern in etwa so aus: loop {if bedingung break; yield;} > Wie wuerdest du denn mein Datei-problem loesen? > Das array vor dem Senden umkopieren geht leider auch nicht, da es so gross sein wird, das es nur 1mal in den Speicher passt. > > Btw: wieviel Speicherplatz fuer Vars gibt es eigentlich maximal? Ich würde aus den beiden Threads einen machen, da entweder nur das eine oder andere ausfeführt wird. Das umkopieren ginge schon, wenn das Array nicht grö�er als 30kByte ist. Aber das sollte nicht nötig sein. Selbst, wenn Du auf das Array schreibst, während es gelesen wird, sollte es keine Probleme geben, zumindest bei byte- und int-Arrays nicht. Probleme gibt's nur, wenn zwei threads gleichzeitug schreiben wollen, oder ein Datensatz mit mehreren Werten geschrieben werden soll und gerade diese Stelle ausgelesen wird. Insgesamt besitzt die CC2 64kByte RAM. Davon sollten etwas über 60kByte verfügbar sein. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: |