C ++ : 포크 프로세스를 통해 포인터를 공유 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/650770

  •  19-08-2019
  •  | 
  •  

문제

어머니 프로세스에서 포기하고 사용/읽는 몇 가지 프로세스에 의해 계산되어야하는 카운트 변수가 있습니다.

나는 Main () 함수에서 어머니 과정의 포인터를 만들려고 노력했으며 포크 된 아이들의 포인터를 세었다. 작동하지 않습니다! 주소가 모든 과정에서 동일하더라도 모든 어린이는 자체 사본을 가지고있는 것 같습니다.

그렇게하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

각 어린이는 부모 프로세스 메모리의 자체 사본을 얻습니다 (적어도 무엇이든 수정하기 위해 트라이가있는 즉시). Betweeen 프로세스를 공유 해야하는 경우 공유 메모리 또는 유사한 IPC 메커니즘을 살펴 봐야합니다.

BTW, 왜 이것을 커뮤니티 위키를 만드는가? 당신은 그렇게함으로써 응답을 제한 할 수 있습니다.

다른 팁

2 프로세스는 동일한 메모리를 공유 할 수 없습니다. 포크 아동 프로세스가 포크 후 동일한 기본 메모리를 공유한다는 것은 사실이지만,이를 작성하려는 시도는 운영 체제가 다른 곳에 새로운 서면 공간을 할당하게 할 것입니다.

다른 형태의 다른 형태를 살펴보십시오 IPC 사용.

내 경험은 적어도 두 가지 프로세스간에 정보를 공유하고 싶다면 약간의 공간* 포인터 만 메모리에 공유하고 싶지 않다는 것입니다. 당신은보고 싶을 수도 있습니다

간호사를 부스트하십시오

프로세스간에 구조화 된 데이터 ( "클래스"및 "structs")를 공유하는 방법, 아이디어를 제공 할 수 있습니다.

아니요, IPC 또는 스레드를 사용하십시오. 파일 설명 자만 공유됩니다 (그러나 Seek 포인터는 아님).

공유 메모리를 확인하고 싶을 수도 있습니다.

포인터는 항상 같은 과정에 있습니다. 프로세스의 기본 주소와 비교하여 프로세스에 대한 비공개입니다. 모든 운영 체제에는 다양한 종류의 IPC 메커니즘이 있습니다. Windows 메시징, 공유 메모리, 소켓, 파이프 등을 선택할 수 있습니다. 요구 사항 및 데이터 크기에 따라 하나를 선택하십시오. 또 다른 메커니즘은 가상 메모리 API를 사용하여 대상 프로세스에 데이터를 작성하고 해당 포인터로 프로세스에 알리는 것입니다.

공유 카운트에 잘 맞는 간단한 옵션이지만 제한된 형태의 IPC는 '공유 데이터 세그먼트'입니다. Windows에서 이것은 The를 사용하여 구현됩니다 #pragma data_seg 지령.

이것 좀 봐 기사 예를 들어.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top