跟踪线程ID - 脏修复?

时间:2014-08-28 11:40:48

标签: c c++-cli

我为一个大型原生C库的客户构建了一个c ++ cli包装器。然后我被要求使它成为可实现的,我不打算以OOP方式重写整个事情所以我所做的是摆脱所有全局变量和任何会干扰通过库和dll运行的多个线程的东西事实上,我实现了与静态库的所有通信的胎面跟踪(因为它严格同步)。在外面,它看起来好像是OO。我觉得这样做有点脏,可能有更好的解决办法吗?

1 个答案:

答案 0 :(得分:1)

她有两个问题:不稳定性和线程安全性。

使库可实现的标准技巧是将所有全局变量放在结构中。然后,您需要提供属于特定实例的结构。 最简单的方法(不是线程安全,顺便说一句)是有一个全局结构指针,可用于指向结构的当前实例。为了使它的线程安全,你需要在每个函数调用中传递一个struct指针(有点繁琐)。

为了使其成为线程安全的,您还需要重写所有使用库调用的代码(包括C库和第三方库)或非线程安全的系统调用。用线程安全代码替换这些调用或用锁定它们(例如使用信号量)。