Du bist nicht angemeldet.

Werbeanzeige

Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

221

06.05.2013, 20:44

Kursiert gerade in einem Thread zum Thema SFML.
Falls es der Creator des Codeschnipsels sieht. Nimms nicht krumm. Das ist einfach nur geil. =D

C-/C++-Quelltext

1
sf::Clock();
42 / Pi = 13,37

222

08.05.2013, 01:07

Nach zwei Stunden Netzwerk-Debug merke ich, dass meine selbstgebaute Semaphore nicht locked... aua! -.-"

C#-Quelltext

1
2
3
4
5
mResolvedStack = false;

// Lock, until the next action is resolved.
while (mResolvedStack)
 Thread.Sleep(10);

xardias

Community-Fossil

Beiträge: 2 771

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

223

08.05.2013, 06:20

Ich musste letztens in diesem code was patchen... das ist nur ekelig: http://unclutter.cvs.sourceforge.net/vie…r.c?view=markup
Auszug:

C-/C++-Quelltext

1
2
3
4
5
char *progname;
  pexit(str)char *str;{
  fprintf(stderr,"%s: %s\n",progname,str);
  exit(1);
}


PS: Objektiv ist der Code ok, aber subjektiv muss ich bei dem alten C stil weinen.

NachoMan

Community-Fossil

Beiträge: 3 905

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

224

08.05.2013, 14:49

Nach zwei Stunden Netzwerk-Debug merke ich, dass meine selbstgebaute Semaphore nicht locked... aua! -.-"

C#-Quelltext

1
2
3
4
5
mResolvedStack = false;

// Lock, until the next action is resolved.
while (mResolvedStack)
 Thread.Sleep(10);

Wieso machst du auch so einen scheiß? xD
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Helmut

5x Contest-Sieger

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

225

08.05.2013, 15:04

Nach zwei Stunden Netzwerk-Debug merke ich, dass meine selbstgebaute Semaphore nicht locked... aua! -.-"

C#-Quelltext

1
2
3
4
5
mResolvedStack = false;

// Lock, until the next action is resolved.
while (mResolvedStack)
 Thread.Sleep(10);

Wieso machst du auch so einen scheiß? xD

Prinzipiell kann man schon mit bool Variablen synchronisieren. Aber man muss zB den VS Compiler benutzen (ab 2005) und die bool Variable volatile markieren. Dann werden die Memoryfences (oder wie die heißen) automatisch eingefügt. Ansonsten kann es leicht zu Raceconditions auf MultiCore Maschinen kommen, wenn der Speicher der synchronisiert wird, auf einem Prozessor gecacht wurde.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Schrompf

Alter Hase

Beiträge: 1 418

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

226

08.05.2013, 15:08

Bewirkt "volatile" bei C# wirklich eine automatische Absicherung gegen parallele Zugriffe?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Helmut

5x Contest-Sieger

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

227

08.05.2013, 15:17

Oh, habe übersehen, dass das C# ist. Keine Ahnung ob das da auch geht. Was ich geschrieben habe galt C/C++. Ich würde auf Nummer Sicher gehen und Critical Sections oder Interlocked Funktionen benutzen.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Architekt

Community-Fossil

Beiträge: 2 490

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

228

08.05.2013, 15:26

Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

229

08.05.2013, 15:33

Ein C# volatile ist kein Java synchronized. Es arbeitet aber genau wie ein Java volatile (ja, volatile, nicht synchronized). Es sorgt dafür, dass Zugriffe auf die Variable auch wirklich auf die Variable durchgeführt werden und nicht etwa in Register optimiert wird, weil das für parallele Änderungen natürlich dafür sorgen würde, dass die Variable im Register kein Update bekommt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 418

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

230

08.05.2013, 15:42

Daher auch meine Frage @Helmut: in C++ ist volatile nämlich KEINE Thread-Sicherheit. Und in C# anscheinend auch nicht. Es ist nur ein Hinweis an den Compiler, dass sich diese Variable auf Wegen ändern wird, die der Compiler nicht vorhersehen kann. In dem Beispielcode

Quellcode

1
2
while (mResolvedStack)
 Thread.Sleep(10);


würde ein schlauer Compiler, wenn er den Inhalt von Thread.Sleep() überschauen kann und feststellt, dass dort nirgends mResolvedStack geändert wird, die while-Bedingung rausoptimieren. Es hat ja keinen Sinn, bei jedem Durchlauf erneut zu testen, wenn nichts von dem Code in der Schleife die Variable verändern kann. Daher *muss* man an dieser Stelle das "mResolvedStack" als volatile deklariert werden oder Du bekommst interessante Bugs im Release Build. Das heißt aber nicht, dass der Zugriff auf mResolvedStack deswegen atomar ist und sicher aus mehreren Threads heraus geschrieben/gelesen werden kann. Du musst (sowohl in C++ als auch in C#) immernoch manuell locken oder einen atomaren Datentyp benutzen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige