c에서 공유 메모리에 액세스하는 생성
-
12-09-2019 - |
문제
그래서 나는 어떻게 해야할지 모르겠다는 문제가 있습니다. 나는 당신이 그것을 다루는 방법을 알려줄 수 있기를 바랐습니다.
공유 메모리에 n 수의 버퍼를 할당해야합니다. 각 버퍼는 0으로 초기화되어야합니다. 그러면 N/2의 어린이 프로세스 수를 포크해야합니다.
각 어린이 (i)는 값 (i)을 버퍼 (i)에 씁니다. 그런 다음 전류 버퍼에서 값을 읽습니다. 그 중에 값이 변경되면 메시지가 표시됩니다. 그런 다음 아이는 i-positions n/2 횟수를 옮깁니다.
So I can have
N Buffers = 11. (must be prime)
N/2 children = 5.
So child 2 would:
write into buffer 2, sleep, read from buffer 2. (now move 2 positions)
write into buffer 4, sleep, read from buffer 4. (now move 2 positions)
**remmeber we only have five buffers so we go around again*****
write into buffer 1, sleep, read from buffer 1. (now move 2 positions)
write into buffer 3, sleep, read from buffer 3. (now move 2 positions)
write into buffer 5, sleep, read from buffer 5. ***we stop moving here. N/2 moves already performed.
이것이 어떻게 해야하는지 아이디어가 있습니까?
- N 정수 배열 만 만들 수 있습니까? 모든 어린이가 동일한 요소에 액세스 할 것이기 때문에 이것이 문제가 될까요?
해결책
공유 메모리 처리를위한 클래식 시스템 v IPC 기능은 다음과 같습니다.
POSIX 동등 물은 다음과 같습니다.
너는 사용한다 mmap()
열린 공유 메모리 객체를 프로세스 주소 공간에로드하기 위해.
다른 팁
N 정수 배열 만 만들 수 있습니까? 모든 어린이가 동일한 요소에 액세스 할 것이기 때문에 이것이 문제가 될까요?
응, 나도 그렇게 생각해. 여러 스레드를 사용하는 경우 다음과 같이 선언하십시오.
volatile int sharedChannel[N];
별도의 프로세스를 사용하고 있고 공유 메모리 버퍼를 제공하기 위해 함수를 사용하는 경우 더 많은 것이 필요합니다.
volatile int *sharedChannel;
제휴하지 않습니다 StackOverflow