Ich habe ein Programm, in dem ein Master-Prozess generiert N Arbeiter, die invertieren, jeder, jede Zeile eines Bildes, mir am Ende ein umgekehrtes Bild geben. Das Programm verwendet Shared Memory und Posix Semaphore, unbenannte Sems, genauer gesagt, und ich benutze shmctl mit IPC_RMID und sem_close und sem_destroy in der Funktion terminate(). Allerdings, wenn ich das Programm mehrmals ausführen, manchmal gibt es mir einen Segmentierungsfehler und ist in der ersten Shmget. Ich habe bereits meinen shmmax-Wert im Kernel geändert, aber das kann ich nicht mit dem shmall-Wert machen, ich weiß nicht warum.Probleme beim Ausführen eines Programms mit gemeinsam genutztem Speicher; Seg Fehler manchmal; Shmmax und Shmall haben etwas damit zu tun?
Kann mir bitte jemand helfen? Warum passiert das und warum ist es nicht die ganze Zeit? Der Code scheint in Ordnung zu sein, gibt mir, was ich will, effizient und so ... aber manchmal muss ich Ubuntu neu starten, um es wieder ausführen zu können, auch wenn ich die Ressourcen freigebe.
Bitte erleuchten Sie mich!
EDIT:
Hier sind die 3-Dateien benötigt, um den Code + die Make-Datei auszuführen:
http://pastebin.com/JqTkEkPv
http://pastebin.com/v7fQXyjs
http://pastebin.com/NbYFAGYq
Sie haben es so laufen./invertiere someimage.ppm outimage.ppm (teste jetzt bitte mit einem kleinen)
Hier sind einige Werte, die wichtig sein können:
$ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 262144
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
$ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
EDIT: die seg Fehler behoben wurde! Ich habe ein ** Array im Shared Memory zugewiesen und das war ein bisschen komisch. Also habe ich nur ein Segment für ein * Array zugewiesen und voilà. Wenn Sie möchten, überprüfen Sie den neuen Code und Kommentar.
Das wird schwierig ohne Zugriff auf den Code. – Lagerbaer
Wenn Sie in der Lage sind, auf den Codebereich einzugrenzen, der den Segmentierungsfehler verursacht, fügen Sie diese fehlerhaften Zeilen hier ein. – vpit3833
Ich habe den Beitrag bearbeitet, damit Sie die Links mit dem gesamten Quellcode sehen können – neverMind