1
1
这是最难的部分。我认为只有这样才能在现有的DLL周围创建一个包装器。调用时,它将还原当前线程的状态(全局变量),并在调用DLL返回时保存它们。您需要知道DLL中的所有状态变量,并能够读/写它们。 如果性能不是问题,那么对整个DLL使用一个锁就足够了,而且是最容易正确实现的。这将确保一次只有一个线程访问(读或写)DLL。 |
2
2
当然,您始终可以创建一个包装层来处理多线程特定的任务,例如锁定。您甚至可以在第二个链接到原始DLL的DLL中这样做,然后在最后一个项目链接到新DLL。 请注意,无论如何实现它,这都不是一项容易的任务。你必须知道哪个线程能够在什么时候修改哪个值,谁能够读取什么以及什么时候等等,除非你想遇到死锁或竞争条件之类的问题。 如果您的解决方案允许,通常最好分配一个线程来修改任何数据,而让所有其他线程都只读而不写,因为并发读访问比并发写访问更容易实现( Boost 提供所有基本功能,例如 shared_mutex ). |
da cheng · 在c++11中使用条件变量使程序陷入死锁 6 年前 |
Eunjeong Choi · 为什么此代码返回意外结果?(条件变量) 6 年前 |
Razonixx · 从线程内增加全局计数器变量,而不必等待每个线程 6 年前 |
Administrator · c#-等待完成2个线程中的1个 6 年前 |
Francis Cugler · 删除Windows库依赖项 6 年前 |
AshR · 程序断断续续地使用main报告与线程本身不同的线程id 7 年前 |
user7256215 · 在macOS内核扩展中有效地使用同步 7 年前 |