Для моего проекта у меня есть две задачи: 1) Writer: записать значение в структуру в общей памяти 2) Reader: прочитать значение из структуры
Вот код писателя
struct test {
volatile int read;
volatile int write;
};
int main()
{
// ftok to generate unique key
key_t key = ftok("shmfile",65);
// shmget returns an identifier in shmid
int shmid = shmget(key,1024,0666|IPC_CREAT);
// shmat to attach to shared memory
struct test *t = (struct test *) shmat(shmid,(void*)0,0);
printf("Going to write into test structure");
t->read = 1;
t->write = 2;
//printf("Data written in memory: %s\n",str);
//detach from shared memory
shmdt((void *)t);
return 0;
}
Вот код читателя
int main()
{
// ftok to generate unique key
key_t key = ftok("shmfile",65);
// shmget returns an identifier in shmid
int shmid = shmget(key,1024,0666|IPC_CREAT);
// shmat to attach to shared memory
struct test *t = (struct test *) shmat(shmid,(void*)0,0);
printf("Data read from memory: %d:%d\n",t->read,t->write);
//detach from shared memory
shmdt((void *)t);
// destroy the shared memory
shmctl(shmid,IPC_RMID,NULL);
return 0;
}
Когда я сначала запускаю писатель, а затем читатель, все работает нормально.
Но для отладки я попытался запустить оба одновременно через lldb.Я вижу, если писатель пишет t-> read = 1, в то же время он не будет обновляться в процессе чтения.После того, как изменения сделаны, в читателе будет отражено, вызывает ли он shmat.
Может ли кто-нибудь сказать мне, как сделать так, чтобы изменения в общей памяти происходили синхронно?