当前位置: 首页 > 知识库问答 >
问题:

生产者消费者-在子进程中使用信号量

夏骞尧
2023-03-14
struct shma{readindex,writeindex,buf_max,char buf[5],used_count};

main()
{
struct shma* shm;
shmid = shmget();
shm = shmat(shmid);

init_shma(0,0,5,0);
while(i++<2)
{
   ret = fork();
   if(ret > 0 )
      continue;
   if(ret ==0 )
   {
       if(i==0)
       {
         char value;
         sembuf[3]; semun u1; values[] = {5,1,0}; // Sem Numbers 1,2,3
         semid = semget(3 semaphores);
         semctl(SETALL,values);
         while(1)
         {
           getValuefromuser(&value);
           decrement(1);
           decrement(2); // Critical section
           *copy value to shared memory*
           increment(2);
           increment(3); // used count
         }
       }
       if(i==1)
       {
         char value;
         sembuf[3]; semun u1; values[] = {5,1,0}; // Sem Numbers 1,2,3
         semid = semget(3 semaphores);
         semctl(SETALL,values);
         while(1)
         {
           decrement(3); // Used Count
           decrement(2); // Critical Section
           read and print(&value); // From Shared Memory
           increment(2);
           increment(1); // free slots
         }
       }
     } 
 }//while
Cleanup Code.
 }//main

我应该在两个子进程中获得信号量ID…还是缺少其他东西。

共有1个答案

易雅畅
2023-03-14

我最终发现我的理解有问题。

我必须在父进程中创建和设置一个或三个信号量,然后在相应的生产者和消费者子进程中获得它们的值,然后相应地使用它们。

我在更早的时候,在生产者和消费者中创建信号量。我真傻。!!

 类似资料:
  • 本文向大家介绍使用信号量的生产者消费者问题,包括了使用信号量的生产者消费者问题的使用技巧和注意事项,需要的朋友参考一下 生产者消费者问题是同步问题。有一个固定大小的缓冲区,生产者生产商品并将其输入缓冲区。消费者从缓冲区中删除项目并消费它们。 当消费者从缓冲区中消费商品时,生产者不应将商品生产到缓冲区中,反之亦然。因此,缓冲区只能一次由生产者或使用者访问。 生产者消费者问题可以使用信号量解决。生产者

  • 问题内容: 我需要编写一个类似于生产者- 消费者的问题,必须使用信号量。我尝试了几种解决方案,但都无济于事。首先,我在Wikipedia上尝试了一个解决方案,但没有成功。我当前的代码是这样的: 使用者的方法运行: 生产者的方法运行: 在上面的代码中,发生了一个消费者线程读取一个位置,然后另一个线程读取了相同位置而没有生产者填充该位置的情况,如下所示: 问题答案: 似乎您使用的是互斥锁而不是信号灯?

  • 问题内容: 我对于如何使用特定的生产者-消费者模式感到困惑,在该模式中,生产者和消费者都可以同时并独立地进行操作。 首先,考虑以下示例,该示例紧随docs中的示例: 关于此脚本,有一个更详细的细节:通过常规的for循环将项目同步放入队列。 我的目标是创建一个使用(或)和的脚本。两者都应安排为同时运行。没有一个消费者协程明确地与生产者绑定或链接。 我如何修改上面的程序,以便生产者是可以与消费者/工人

  • 我有一个消费者作为生产者消费者模式的一部分: 简化: 如果我移除 通过将线程设置为睡眠,CPU使用率攀升到极高的水平(13%),而不是0%。 此外,如果我实例化该类的多个实例,则每个实例的CPU使用率都会以13%的增量攀升。 大约每分钟(可能每30秒)都会向BlockingCollection添加一个新的LogItem,并将适用的消息写入文件。 有没有可能线程以某种方式阻止了其他线程的运行,而系统

  • 我正在编写一个程序,其中几个生产者生成一些应该由几个消费者处理的数据。由于每条数据的消耗大约需要100ms,而目标平台有很多处理器,所以在我看来,每个生产者和每个消费者都得到自己的线程似乎是很自然的。我的问题是:Qt信号/插槽是将数据块从生产者传递到消费者的好方法吗?还是建议更好的解决方案(强烈首选Qt)。 为了防患于未然,制作者每小时产生几十万个数据。

  • 本教程演示了如何发送和接收来自Spring Kafka的消息。 首先创建一个能够发送消息给Kafka主题的Spring Kafka Producer。 接下来,我们创建一个Spring Kafka Consumer,它可以收听发送给Kafka主题的消息。使用适当的键/值序列化器和解串器来配置它们。 最后用一个简单的Spring Boot应用程序演示应用程序。 下载并安装Apache Kafka 要