在 Linux 中,要在同一进程的多个实例之间共享共享库(.so)中的全局变量,可以使用以下方法:
POSIX 共享内存是一种跨进程的共享内存机制,可以在多个进程之间共享数据。在 Linux 中,可以使用 shm_open()
和 mmap()
函数创建和映射共享内存。
首先,在共享库中定义全局变量,并将其映射到共享内存中。例如:
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
int *shared_variable;
void init_shared_memory() {
int fd = shm_open("/my_shared_memory", O_CREAT | O_RDWR, 0666);
if (fd == -1) {
perror("shm_open");
exit(1);
}
if (ftruncate(fd, sizeof(int)) == -1) {
perror("ftruncate");
exit(1);
}
shared_variable = (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (shared_variable == MAP_FAILED) {
perror("mmap");
exit(1);
}
}
然后,在每个进程中初始化共享内存,并使用 shared_variable
进行通信。例如:
#include<stdio.h>
int main() {
init_shared_memory();
// 修改共享变量
(*shared_variable)++;
// 输出共享变量的值
printf("Shared variable value: %d\n", *shared_variable);
return 0;
}
如果您的应用程序使用多个线程而不是多个进程,则可以使用线程局部存储(Thread Local Storage,TLS)来实现全局变量的线程间共享。
在 Linux 中,可以使用 __thread
关键字声明线程局部变量。例如:
#include <pthread.h>
__thread int shared_variable;
void *thread_function(void *arg) {
// 修改线程局部变量
shared_variable++;
// 输出线程局部变量的值
printf("Shared variable value: %d\n", shared_variable);
return NULL;
}
int main() {
pthread_t thread;
// 创建线程
if (pthread_create(&thread, NULL, thread_function, NULL) != 0) {
perror("pthread_create");
exit(1);
}
// 等待线程结束
if (pthread_join(thread, NULL) != 0) {
perror("pthread_join");
exit(1);
}
return 0;
}
这种方法适用于多个线程共享全局变量,而不是多个进程。
领取专属 10元无门槛券
手把手带您无忧上云