关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
我围绕一个大型本地 C 库为客户构建了一个 c++cli 包装器。然后我被要求使其可实例化,并且我不打算以 OOP 方式重写整个事情,所以我所做的是摆脱所有全局变量和任何会干扰通过库和 dll 运行的多个线程的东西一方面,我为与静态库的所有通信实现了跟踪跟踪(因为它是严格同步的)。在外面看来,它好像是 OO。不过我觉得这样做有点脏,可能有更好的解决方案吗?
最佳答案
她有两个问题:可实例性和线程安全。
使库可实例化的标准技巧是将所有全局变量放在一个结构中。然后,您需要提供属于特定实例的结构。
最简单的方法(顺便说一句,这不是线程安全的)是拥有一个全局结构指针,您可以使用它来指向结构的当前实例。为了使其线程安全,您需要在每个函数调用中传递一个结构指针(有点乏味)。
为了使其线程安全,您还需要重新编写所有使用库调用(C 库和第 3 方库)或非线程安全的系统调用的代码。要么用线程安全代码替换这些调用,要么用锁包围它们(例如使用信号量)。
关于c - 跟踪线程 id - 脏修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547926/