c - 跟踪线程 id - 脏修复?

标签 c c++-cli

关闭。这个问题需要更多 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/

相关文章:

c - 如何在 C 中使用 getopt 打印帮助文本?

c++ - 动态创建变量 C++/cli .NET

c# - SQL 数据库 VS。多个平面文件(数以千计的小型 CSV)

c# - 无法在 C++/CLI 中找到入口点

arrays - 将数组初始化为固定长度数组的最佳方法是什么? (C++/CLI)

c# - 为什么我的 C# 程序在运行时找不到项目中引用的 C++/CLI DLL

c - printf/sprintf 编译器警告是概念上的中断吗?

c++ - 在 Makefile.am 的 _SOURCE 中分配 c 和 cpp 文件

c++ - 初始化C结构的双花括号是什么意思?

c - 下标值既不是数组也不是指针也不是 vector