gpt4 book ai didi

c - 我需要为此代码添加同步吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:48 25 4
gpt4 key购买 nike

我正在编写一些代码来执行到 DLL 的显式链接。此代码作为与 .lib 文件的隐式链接的替代方法提供给我的用户。目前我计划的代码如下所示:

void DisableModule(int Module)
{
typedef void (*DisableModuleProc)(int);
static DisableModuleProc proc = NULL;
if (proc == NULL)
proc = (DisableModuleProc)GetProcAddress(hModule, "DisableModule");
proc(Module);
}

这个表单的功能比较多,为了这道题我删掉了错误检查

我的问题与线程安全有关。这个函数可能会被多个线程同时调用。显然静态变量 _DisableModule 存在竞争。我的信念是,因为 _DisableModule 将在机器字边界(32 位或 64 位边界,具体取决于目标)上对齐,所以不会发生撕裂,因此竞争是良性的。 GetProcAddress 可能会被调用多次,但我认为这不会影响程序的正确性。

我的分析是否正确?

最佳答案

这段代码在 x86 和 amd64 上是完全安全的。在最坏的情况下,GetProcAddress 会被调用多次。

在其他架构上可能存在部分写入被中断的问题。要避免这种情况,您可以使用原子 (InterlockedComparExchange ...),但这在这里是多余的。

关于c - 我需要为此代码添加同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com