您需要在生产者和消费者文件中调用 shmat 和 shmget 吗?

Posted

技术标签:

【中文标题】您需要在生产者和消费者文件中调用 shmat 和 shmget 吗?【英文标题】:Do you need to call shmat and shmget in both producer and consumer files? 【发布时间】:2013-09-22 17:42:07 【问题描述】:

在生产者过程中,我有以下。 说

MEMKEY 是 key_t 234500,并且

*shared_ring 是一个指向正在共享的数据结构(donut_ring)的指针。

int shmid, semid[3];

    if((shmid = shmget (MEMKEY, sizeof(struct donut_ring),
                IPC_CREAT | 0600)) == -1)
perror("shared get failed: ");
exit(1);

if((shared_ring = shmat (shmid, NULL, 0)) == (void *)-1)
perror("shared attach failed: ");
sig_handler(-1);

假设消费者和生产者程序位于不同的文件中。

每个消费者如何找到生产者创建的共享内存ID,并将段附加到他们的地址空间?

我是否需要在消费者文件中再次调用 shmat shmid,并为每个分叉的消费者进程调用?它不会创建一个新的而不是使用一个吗?

【问题讨论】:

【参考方案1】:

想通了,答案是肯定的。两个文件中都需要这两个调用。

【讨论】:

以上是关于您需要在生产者和消费者文件中调用 shmat 和 shmget 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Kafka 消费者应该在生产者之前启动吗?

多线程之生产者消费者模式

最佳实践生产者和消费者模式中的双缓冲技术

通过 Observable(RxJava) 使用 Kafka

Boost Threads Producer/Consumer 意外行为

一、多线程下生产者消费者模式