线程通信

时间:2010-01-12 12:22:27

标签: multithreading

是否有任何工具可用于跟踪线程之间的通信; 1.在一个过程中运行 2.在不同的流程(IPC)中运行

3 个答案:

答案 0 :(得分:2)

我假设你需要跟踪它以进行调试。在正常情况下,如果没有自定义编写代码,很难做到这一点。对于我遇到的类似问题,我有一个每处理器跟踪缓冲区,用于简要记录正在运行的线程执行的时间和有趣的操作。该日志是一个循环跟踪,用于存储如下数据:

struct trace_data {
  int op;
  void *data;
  struct time t;
  union {
    struct {
      int op1_field1;
      int op1_field2;
    } d1;
    struct {
      int op2_field1;
      int op2_field2;
    } d2
  } u;
}

跟踪日志是这些长度为1024的结构的数组,每个处理器一个。每个线程用于跟踪操作,以及确定事件因果关系的时间。用于在“联合”中存储数据的字段取决于正在进行的操作。 “数据”指针的含义也取决于“操作”。当程序崩溃时,我会在gdb中打开核心,我有一个gdb脚本,它将遍历每个处理器中的日志并打印出操作及其相应的数据,以找出事件的历史。

对于不同的进程,您可以将此类日志记录到文件中 - 每个进程一个。这个例子是在C中,但你可以用你想要使用的任何语言来做这个,只要你能找出当前运行线程的CPU id。

答案 1 :(得分:1)

只要您在(1)中使用pthreads,就可能正在寻找类似Intel Thread Checker的内容。

对于不同进程之间的通信(2),如果您有源代码,可以使用面向方面编程(AOP),或者为IPC函数和LD_PRELOAD编写自己的包装器。

编辑:哎呀,你说追踪,而不是检查

答案 2 :(得分:0)

这将取决于您正在使用的操作系统和开发环境。如果您使用的是Visual Studio,请查看Visual Studio 2010中的工具。