Dalam C++, memori kongsi dan baris gilir mesej ialah dua kaedah komunikasi antara proses yang biasa digunakan. Mereka boleh membantu kami berkongsi data dan maklumat antara proses yang berbeza, membolehkan pengaturcaraan yang lebih cekap.
Memori dikongsi ialah kawasan ingatan khas yang boleh dikongsi oleh pelbagai proses. Menggunakan memori kongsi mengelakkan overhed menyalin data dan mengurangkan kelewatan dalam memindahkan data antara proses.
Untuk menggunakan memori yang dikongsi dalam C++, anda perlu memasukkan fail pengepala
#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; }
Dalam contoh di atas, kami menggunakan fungsi shmget untuk mencipta memori dikongsi, dan fungsi shmat menghubungkan memori yang dikongsi ke ruang alamat proses semasa, yang kemudiannya boleh dimanipulasi seperti pembolehubah normal. Akhir sekali, gunakan fungsi shmdt untuk memutuskan sambungan daripada memori yang dikongsi Fungsi shmctl boleh digunakan untuk mengawal tingkah laku memori yang dikongsi.
Baris gilir mesej ialah mekanisme komunikasi antara proses yang boleh menyampaikan mesej antara proses. Kelebihannya ialah ia boleh menghantar mesej secara tidak segerak, tidak seperti memori kongsi yang memerlukan penguncian untuk memastikan penyegerakan data. Untuk menggunakan baris gilir mesej dalam C++, anda perlu memasukkan fail pengepala
#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; }
Dalam contoh di atas, kami menggunakan fungsi msgget untuk mencipta baris gilir mesej, fungsi msgrcv untuk menerima mesej dan fungsi msgsnd untuk menghantar mesej. Struktur msg_buf digunakan untuk menentukan jenis dan kandungan mesej. Akhir sekali, gunakan fungsi msgctl untuk memadam baris gilir mesej.
Secara amnya, baris gilir memori dan mesej adalah kaedah komunikasi antara proses yang sangat praktikal. Menggunakan teknik ini dalam aplikasi berbilang proses dan berbilang benang boleh menambah baik keselarasan dan kecekapan program serta mengurangkan penyegerakan yang kompleks dan isu tak segerak.
Atas ialah kandungan terperinci Menggunakan memori kongsi dan baris gilir mesej dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!