Thread flock funktioniert nicht (64 answers)
Opened by x-man at 2006-04-17 19:11

betterworld
 2006-04-19 05:15
#7384 #7384
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Weil der von mir gegebene Code immer die Datei mit dem Namen "datei" anlegt (wobei man die Datei vorher selbst anlegen sollte, wenn man sysopen ohne O_CREAT verwendet), habe ich den Code immer mit /tmp als Arbeitsverzeichnis laufen lassen. Einmal habe ich vergessen, "cd /tmp" zu machen und somit lief er im Home-Verzeichnis. Dreimal duerft Ihr raten, was ich rausgefunden habe: Im Home-Verzeichnis gibt es reproduzierbar deutlich andere Ergebnisse als in /tmp! (Man muss erwaehnen, dass /home bei mir ext3 ist und /tmp ist tmpfs.)

Die Ergebnisse in /tmp sind immer ungefaehr wie oben (54 fuer sysopen, 58 fuer open), in ~ sind sie hingegen immer ungefaehr 54 fuer sysopen, 70 fuer open.


Ferner habe ich noch probiert, was passiert, wenn man bei sysopen nicht nur O_WRONLY sondern O_WRONLY|O_CREAT|O_TRUNC angibt (das ist genau das, was open auch macht, siehe strace). Das Ergebnis ist erschuetternd: Nun braucht sysopen länger als open! Circa 65 Sekunden fuer 5000000 Durchläufe auf tmpfs und ca. 80 auf ext3.

Hier noch einmal als Uebersicht:
Code: (dl )
1
2
3
4
5
                                     |  ext3  |  tmpfs
=======================================================
open | 70 | 58
sysopen (O_WRONLY) | 54 | 54
sysopen (O_WRONLY|O_CREAT|O_TRUNC) | 80 | 65

Was mich vor allem wundert, ist, dass der Unterschied zwischen open und sysopen(O_WRONLY|O_CREAT|O_TRUNC) sich je nach Dateisystem unterschiedlich stark äußert. Ein Blick in strace zeigt naemlich beide Male dieselben System-Calls, und außerhalb von System-Calls sollte sich das Dateisystem eigentlich nicht auswirken...

Ich bin jetzt etwas zu muede, um weiter zu experimentieren.\n\n

<!--EDIT|betterworld|1145410044-->

View full thread flock funktioniert nicht