C++에서 공유 메모리와 메시지 큐는 일반적으로 사용되는 두 가지 프로세스 간 통신 방법입니다. 이를 통해 서로 다른 프로세스 간에 데이터와 정보를 공유할 수 있어 보다 효율적인 프로그래밍이 가능해집니다.
공유 메모리는 여러 프로세스에서 공유할 수 있는 특수 메모리 영역입니다. 공유 메모리를 사용하면 데이터 복사 오버헤드가 방지되고 프로세스 간 데이터 전송 지연이 줄어듭니다.
C++에서 공유 메모리를 사용하려면
#include <sys/shm.h> #include <stdio.h> #include <stdlib.h> int main() { int shmid; char *shmaddr; shmid = shmget((key_t)1234, sizeof(char)*100, 0666 | IPC_CREAT); if(shmid == -1){ perror("shmget failed"); exit(EXIT_FAILURE); } shmaddr = (char*) shmat(shmid, (void*)0, 0); if(shmaddr == (char*)-1){ perror("shmat failed"); exit(EXIT_FAILURE); } sprintf(shmaddr, "Hello shared memory!"); printf("Message is written in shared memory: %s ", shmaddr); shmdt(shmaddr); return 0; }
위 예에서는 shmget 함수를 사용하여 공유 메모리를 생성하고 shmat 함수는 공유 메모리를 현재 프로세스의 주소 공간에 연결합니다. 정상변수. 마지막으로 shmdt 함수를 사용하여 공유 메모리와의 연결을 끊습니다. shmctl 함수를 사용하여 공유 메모리의 동작을 제어할 수 있습니다.
메시지 큐는 프로세스 간에 메시지를 전달할 수 있는 프로세스 간 통신 메커니즘입니다. 데이터 동기화를 보장하기 위해 잠금이 필요한 공유 메모리와 달리 메시지를 비동기적으로 전송할 수 있다는 장점이 있습니다. C++에서 메시지 큐를 사용하려면
#include <sys/msg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ long msg_type; char msg_text[100]; } msg_buf; int main() { int msgid; msg_buf msg; msgid = msgget((key_t)1234, 0666 | IPC_CREAT); if(msgid == -1){ perror("msgget failed"); exit(EXIT_FAILURE); } msg.msg_type = 1; strcpy(msg.msg_text, "Hello message queue!"); if(msgsnd(msgid, (void*)&msg, sizeof(msg_buf), 0) == -1){ perror("msgsnd failed"); exit(EXIT_FAILURE); } memset(&msg, 0, sizeof(msg_buf)); if(msgrcv(msgid, (void*)&msg, sizeof(msg_buf), 0, 0) == -1){ perror("msgrcv failed"); exit(EXIT_FAILURE); } printf("Message received from message queue: %s ", msg.msg_text); if(msgctl(msgid, IPC_RMID, 0) == -1){ perror("msgctl failed"); exit(EXIT_FAILURE); } return 0; }
위의 예에서는 msgget 함수를 사용하여 메시지 대기열을 만들고, msgrcv 함수를 사용하여 메시지를 받고, msgsnd 함수를 사용하여 메시지를 보냅니다. msg_buf 구조는 메시지의 유형과 내용을 정의하는 데 사용됩니다. 마지막으로 msgctl 함수를 사용하여 메시지 큐를 삭제합니다.
일반적으로 공유 메모리와 메시지 큐는 프로세스 간 통신의 매우 실용적인 방법입니다. 다중 프로세스 및 다중 스레드 응용 프로그램에서 이러한 기술을 사용하면 프로그램 동시성과 효율성을 향상시키고 복잡한 동기화 및 비동기 문제를 줄일 수 있습니다.
위 내용은 C++에서 공유 메모리 및 메시지 대기열 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!