Heim >Backend-Entwicklung >C++ >Verwendung von Shared Memory und Nachrichtenwarteschlangen in C++

Verwendung von Shared Memory und Nachrichtenwarteschlangen in C++

WBOY
WBOYOriginal
2023-08-22 16:21:441409Durchsuche

Verwendung von Shared Memory und Nachrichtenwarteschlangen in C++

In C++ sind Shared Memory und Message Queue zwei häufig verwendete Methoden zur prozessübergreifenden Kommunikation. Sie können uns dabei helfen, Daten und Informationen zwischen verschiedenen Prozessen auszutauschen und so eine effizientere Programmierung zu ermöglichen.

Shared Memory ist ein spezieller Speicherbereich, der von mehreren Prozessen gemeinsam genutzt werden kann. Durch die Verwendung von Shared Memory wird der Aufwand für das Kopieren von Daten vermieden und die Verzögerung bei der Datenübertragung zwischen Prozessen verringert.

Um Shared Memory in C++ zu verwenden, müssen Sie die Header-Datei einbinden und für den Betrieb die Funktionen shmget, shmat, shmdt und shmctl verwenden. Hier ist ein einfaches Beispiel für einen gemeinsamen Speicher:

#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;
}

Im obigen Beispiel verwenden wir die Funktion shmget, um einen gemeinsamen Speicher zu erstellen, und die Funktion shmat verbindet den gemeinsamen Speicher mit dem Adressraum des aktuellen Prozesses, der dann wie folgt manipuliert werden kann normale Variable. Verwenden Sie abschließend die Funktion shmdt, um die Verbindung zum gemeinsam genutzten Speicher zu trennen. Mit der Funktion shmctl kann das Verhalten des gemeinsam genutzten Speichers gesteuert werden.

Nachrichtenwarteschlange ist ein prozessübergreifender Kommunikationsmechanismus, der Nachrichten zwischen Prozessen übermitteln kann. Sein Vorteil besteht darin, dass Nachrichten asynchron übertragen werden können, im Gegensatz zu Shared Memory, das eine Sperre erfordert, um die Datensynchronisation sicherzustellen. Um die Nachrichtenwarteschlange in C++ zu verwenden, müssen Sie die Header-Datei einbinden und für den Betrieb die Funktionen msgget, msgsnd, msgrcv und msgctl verwenden. Das Folgende ist ein einfaches Beispiel für eine Nachrichtenwarteschlange:

#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;
}

Im obigen Beispiel verwenden wir die Funktion msgget zum Erstellen einer Nachrichtenwarteschlange, die Funktion msgrcv zum Empfangen von Nachrichten und die Funktion msgsnd zum Senden von Nachrichten. Die Struktur msg_buf wird verwendet, um die Art und den Inhalt der Nachricht zu definieren. Verwenden Sie abschließend die Funktion msgctl, um die Nachrichtenwarteschlange zu löschen.

Im Allgemeinen sind Shared Memory und Message Queues sehr praktische Methoden der Kommunikation zwischen Prozessen. Der Einsatz dieser Techniken in Multiprozess- und Multithread-Anwendungen kann die Parallelität und Effizienz von Programmen verbessern und komplexe Synchronisierungs- und asynchrone Probleme reduzieren.

Das obige ist der detaillierte Inhalt vonVerwendung von Shared Memory und Nachrichtenwarteschlangen in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn