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