假设我有一个指向先前分配的共享内存的指针*p。如果其中一个进程调用shmdt()来分离共享内存段,然后尝试分配一个值,例如:*p=0;在调用shmctl(shmid,IPC_RMID,0)进行销毁之前。这样做会不会报错?我无法理解是哪一个以及为什么。 最佳答案 是的,这是一个错误,很可能会导致段错误。当您调用shmget(2)分配共享内存段时,它不会立即放入进程的虚拟地址空间中的任何位置。也就是说,没有您可以写入的地址会将数据写入该段。shmat(2)的工作是将段放入(映射)到进程的地址空间中。(在SystemV共享内存的说法中,这
假设我有一个指向先前分配的共享内存的指针*p。如果其中一个进程调用shmdt()来分离共享内存段,然后尝试分配一个值,例如:*p=0;在调用shmctl(shmid,IPC_RMID,0)进行销毁之前。这样做会不会报错?我无法理解是哪一个以及为什么。 最佳答案 是的,这是一个错误,很可能会导致段错误。当您调用shmget(2)分配共享内存段时,它不会立即放入进程的虚拟地址空间中的任何位置。也就是说,没有您可以写入的地址会将数据写入该段。shmat(2)的工作是将段放入(映射)到进程的地址空间中。(在SystemV共享内存的说法中,这
我正在尝试将(循环)队列(在C中)设计/实现为共享内存,以便它可以在多个线程/进程之间共享。队列结构如下:typedefstruct_q{intq_size;intq_front;intq_rear;int*q_data;}queue;支持以下功能:intempty_q(queue*q);intdisplay_q(queue*q);intcreate_q(queue**q,intsize);intdelete_q(queue**q);intenqueue(queue*q,intdata);intdequeue(queue*q,int*data);根据用户提到的队列大小,在create_
我正在尝试将(循环)队列(在C中)设计/实现为共享内存,以便它可以在多个线程/进程之间共享。队列结构如下:typedefstruct_q{intq_size;intq_front;intq_rear;int*q_data;}queue;支持以下功能:intempty_q(queue*q);intdisplay_q(queue*q);intcreate_q(queue**q,intsize);intdelete_q(queue**q);intenqueue(queue*q,intdata);intdequeue(queue*q,int*data);根据用户提到的队列大小,在create_