c - 如何调试多线程/intr 的打印

标签 c linux multithreading

我试图通过将打印放入多个中断(软件)中进行调试。我看到这些打印与两个线程重叠。

我想打印一些时间/刻度以确保两个线程同时运行。

我使用了jiffies,但当时我没有得到适当的改变。我看到多个中断有相同的刻度。

最佳答案

这被标记为 linux,所以我将为您提供一个 linux 不可移植的答案,因为据我所知,没有真正可移植的方法来执行此操作:

  • 您可以使用pthread_self(),并打印它。它是一种不透明类型,但您可以将其转换为 void *,并且可以在 Linux 上运行,前提是您唯一的目的是区分线程 - 不要将其用于任何用途否则。

  • 您可以使用gettid(),这是一个特定于 Linux 的调用,用于获取与 Linux 下的线程关联的进程号。没错,Linux 下的每个线程都有一个“隐藏”的 PID,gettid() 返回它。这是您可以通过 ps 显示的线程 ID。这稍微不那么恶心。

确保您进行的调用是线程安全的。 sprintf 没问题。 syslog 绝对不是线程安全的(我已经被这个问题困扰了)。因此,您需要一个互斥锁来保护这一点。

关于c - 如何调试多线程/intr 的打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280029/

相关文章:

c++ - 测量缓存内存使用情况

c++ - Heroku/AppFog 上的 Node.js TCP 服务器

ruby-on-rails - 获取每个用户的文件夹大小和所有内容

linux - Rsyslog 错误消息 RHEL 7

linux - 如何在 bash 中以不同名称但相同扩展名将多个文件复制到同一目录中?

尽管有线程时间,c# 每分钟运行一个线程

c# - SQLiteConnection.BeginTransaction 是否在数据库锁定时重试?

c - 链表removeNode C编程

c# - 在 C# 的 Windows 服务中使用 TPL 的基本设计模式

c - 如何比较两个文件并显示 C 中的所有差异?