Linux Сегменты общей памяти: ошибка подтверждения Mutex - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть эти две простые программы, использующие общую память в linux.

Клиент данных:

FILE *fp;
fp = fopen("mem.share", "r");
if (fp<=0){
    cout<<"Error, cannot open memory link file"<<endl;
    return -1;
}
int shmid;
fscanf (fp, "%d", &shmid);  
fprintf(fp, "%d", shmid);
fclose(fp);
cout<<"Using the file share index #"<<shmid<<endl;
uint8_t* buffer = (uint8_t*)shmat(shmid, NULL, 0);
if (buffer<=0){
    cout<<"Error, cannot link memory"<<endl;
    return -1;
}

Поставщик данных:

int shmid = shmget(IPC_PRIVATE, 140, 0666);
FILE *fp;
fp = fopen("mem.share", "w+");
fprintf(fp, "%d", shmid);
fclose(fp);

Я запускаю эти две программы в этой системе, без проблем:

Armbian Buster with Linux 5.3.9-sunxi
/etc/os-release:
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian

Но, когда я попытался запустить программы в этой системе:

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian

Я получил такой результат:

Using the file share index #524304
outstation: pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Aborted

Это общая память в двух системах (с использованием ipcs -m) Armbian:

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 0          alfa       666        140        0
0x00000000 1          alfa       666        140        0
0x00000000 2          alfa       666        140        0
0x00000000 3          alfa       666        140        0
0x00000000 4          alfa       666        140        0
0x00000000 5          alfa       666        140        0
0x00000000 6          alfa       666        140        0
0x00000000 7          alfa       666        140        0

Raspbian:

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 0          root       666        140        0
0x00000000 32769      pi         666        140        0
0x00000000 65538      pi         666        140        0
0x00000000 98307      pi         666        140        0
0x00000000 131076     pi         666        140        0
0x00000000 163845     pi         666        140        0
0x00000000 196614     pi         666        140        0
0x00000000 229383     pi         666        140        0
0x00000000 262152     pi         666        140        0
0x00000000 294921     pi         666        140        0
0x00000000 327690     pi         666        140        0
0x00000000 360459     pi         666        140        0
0x00000000 393228     pi         666        140        0
0x00000000 425997     pi         666        140        0
0x00000000 458766     pi         666        140        0
0x00000000 491535     pi         666        140        0
0x00000000 524304     pi         666        140        0

Может кто-нибудь помочь мне чтобы понять что я делаю не так? В чем разница между этими двумя системами?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...