0
我有我认为是共享库似乎不共享。在第二个进程中,共享整数soShared
应该是2。相反,对于程序的两个实例,我都会得到1的值。有三个部分在该示例中,共享库头,slc.h:linux共享c库不共享
#pragma once
extern volatile int soShared;
共享库本身,slc.c:
int soShared = 0;
和使用共享资源的程序:
#include <unistd.h>
#include <stdio.h>
#include "slc.h"
int main() {
int value = 0;
++soShared;
for (;;) {
if (value != soShared) {
value = soShared;
printf("pid=%d, value=%d\n",getpid(),value);
}
sleep(1);
}
return 0;
}
这些编译和
gcc -c -fPIC -o slc.o slc.c
gcc -shared -o libslc.so slc.o
gcc -o use_slc use_slc.c libslc.so
LD_LIBRARY_PATH=`pwd` ./use_slc &
sleep 1
LD_LIBRARY_PATH=`pwd` ./use_slc &
运行两次
但是输出soShared
的值为1;他们不共享。 (A)有人解释为什么第二次使用libslc.so的值不是2,(B)如何让资源共享这两个进程实际共享的资源?
要重申R ..所说的,.so在运行时加载的文件只是在某些位移中放入.TEXT段的代码。此代码在运行时被复制到每个进程中,但在编译时不会打包到二进制文件中。您希望在使用某种同步构造的共享内存可以完成的进程之间共享某些变量。 – Anirudh