문제

그래서 나는 어떻게 해야할지 모르겠다는 문제가 있습니다. 나는 당신이 그것을 다루는 방법을 알려줄 수 있기를 바랐습니다.

공유 메모리에 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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top