生产者-消费者使用 Pin_Semaphore intel pintool API

问题描述

我正在尝试用两个 pintools 同步两个进程,其中一个进行检测,另一个工具对检测数据进行一些处理。我正在尝试使用 2-semaphores 的典型解决方案来解决它。一个使用两个 PIN_semaphore 初始化为 1 ,另一个为 0 。但面临一些问题:

Tool-1:在 Ist 工具中,它分析了一个应用程序,这个函数在每条指令的分析例程中被调用

 if(Some_condition)
    {
        PIN_SemaphoreWait(&Sem2);

        cout<<"\nINSIDE sem-child\n";
//some-code
        cout<<"\nPassing to Trace-Server\n";

        PIN_SemaphoreSet(&Sem1);                
    }

Tool-2:是第二个工具的一部分,它不分析任何应用程序,但使用 Pin 框架......并且给定的代码从 main 调用并始终运行。

while(1)
{
  PIN_SemaphoreWait(&Sem1);

  cout<<"\nINSIDE sem-parent\n";
//some-code

  PIN_SemaphoreSet(&Sem2);
}

sem1 最初未设置,sem2 最初使用 Pin_SemaphoreSet 设置。

我先运行Tool-2工具,然后再启动工具,-1 我面临的问题是,即使在 Tool-1 在 sem1 上发送 SemaphoreSet 信号之后,这里的 Tool-2 也始终处于阻塞状态……因为 Tool-1 从未在 sem2 上的 SemaphoreWait 处阻塞(现在它不会阻塞为sem2 最初是设置的,但它应该在下次不做的时候阻塞)

Pin_Sempahore 是否有任何限制,或者我以错误的方式进行操作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)