मैं समानांतर में चल रही एन प्रक्रियाएं बनाना चाहता हूं और उन्हें एक म्यूटेक्स लॉक करना है, काउंटर बढ़ाएं, और फिर अनलॉक करें और बाहर निकलें।procs, कांटा(), और म्यूटेक्स
यहाँ मेरी कोड है:
#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;
}
10000 ./procs लेकिन साथ वापस नहीं करता है एक्स = 10000 मुझे लगता है कि इस वजह से म्युटेक्स प्रक्रियाओं के बीच साझा नहीं है, लेकिन क्या करने के लिए सही रास्ता है म्यूटेक्स साझा करें?
मुझे लगता है कि आपको 'फोर्क() 'के साथ इंटरप्रोरिस जाने पर एक सेमफोर का उपयोग करना आसान लगेगा। Http://man7.org/linux/man-pages/man7/sem_overview.7.html देखें और http://stackoverflow.com/questions/6477525/interprocess-mutex-with-pthreads – goji
देखें मैं किस प्रकार का उपयोग करना चाहता हूं एक म्यूटेक्स क्योंकि मैं एक थ्रेड संस्करण को कार्यान्वित करना चाहता हूं जो उसी म्यूटेक्स का उपयोग करता है साथ ही – user1743798
धागे में सेमफोर का भी उपयोग कर सकता है, लेकिन निश्चित रूप से म्यूटेक्स बेहतर फिट बैठते हैं। यदि आप रुचि रखते हैं तो मैंने एक सेमफोर का उपयोग करने का एक उदाहरण दिया है। यहां जांचें: http://codepad.org/m1I9753u -pthread – goji