У меня есть то, что я считал общей библиотекой, которая, похоже, не является общей. Общее целое число soShared
во втором процессе должно быть равно 2. Вместо этого я получаю значение 1 для обоих экземпляров программы. В этом примере есть три части, заголовок разделяемой библиотеки, slc.h:
#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) как можно сделать ресурс soShared фактически общим между двумя процессами?