Ich möchte n Prozesse parallel laufen lassen und sie einen Mutex sperren lassen, einen Zähler erhöhen und dann entsperren und beenden.procs, fork() und mutexes
Hier ist mein Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <unistd.h>
#include <pthread.h>
pthread_mutex_t mutex;
int main(int argc, char **argv) {
if (argc != 2)
return 0;
int n = atoi(argv[1]);
int i = 0;
int status = 0;
pthread_mutex_init(&mutex, NULL);
pid_t pid = 1;
static int *x;
x = mmap(NULL, sizeof *x, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
*x = 0;
printf("Creating %d children\n", n);
for(i = 0; i < n; i++) {
if (pid != 0)
pid = fork();
}
if (pid == 0) {
pthread_mutex_lock(&mutex);
*x = *x + 1;
printf("[CHLD] PID: %d PPID: %d X: %d\n", getpid(), getppid(), *x);
pthread_mutex_unlock(&mutex);
exit(0);
}
wait(&status);
printf("[PRNT] PID: %d X: %d\n", getpid(), *x);
munmap(x, sizeof *x);
return 0;
}
./procs 10000 jedoch nicht zurück mit x = 10000 Ich denke, das liegt daran, dass der Mutex zwischen den Prozessen nicht freigegeben ist, aber was ist der richtige Weg, um den Mutex teilen?
Ich denke, Sie werden mit einem Semaphor einfacher finden, wenn interprorecess mit 'fork()' gehen. Siehe http://man7.org/linux/man-pages/man7/sem_overview.7.html und Siehe http://stackoverflow.com/questions/6477525/interprocess-mutex-with-pthreads – goji
Ich möchte etwas verwenden ein Mutex, weil ich eine Thread-Version implementieren möchte, die auch den gleichen Mutex verwendet – user1743798
Kann einen Semaphor auch in Threads verwenden, aber Mutexe passen natürlich besser. Ich habe ein Beispiel für die Verwendung eines Semaphors gemacht, wenn Sie interessiert sind. schaue hier: http://codepad.org/m1I9753u Link mit -Pthread – goji