gpt4 book ai didi

c++ - 将指针从 C 传递到程序集

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:56 26 4
gpt4 key购买 nike

我想在我的 C/C++ 程序中使用“_test_and_set lock”汇编语言实现和原子交换汇编指令。

class LockImpl 
{
public:
static void lockResource(DWORD resourceLock )
{
__asm
{
InUseLoop: mov eax, 0;0=In Use
xchg eax, resourceLock
cmp eax, 0
je InUseLoop
}

}

static void unLockResource(DWORD resourceLock )
{
__asm
{
mov resourceLock , 1
}

}
};

这有效,但这里有一个错误。

问题是我想传递 DWORD * resourceLock 而不是 DWORD resourceLock。

所以问题是如何将指针从 C/C++ 传递到程序集并取回它。 ?

提前致谢。

问候,-周杰伦。

附言这样做是为了避免用户空间和内核空间之间的上下文切换。

最佳答案

如果您正在为 Windows 编写此代码,您应该认真考虑使用 critical section目的。关键部分 API 函数经过优化,除非确实需要,否则它们不会转换到内核模式,因此在没有争用的正常情况下,开销非常小。

自旋锁的最大问题是,如果您在单 CPU 系统上等待锁,那么您将使用所有可能的循环,而持有锁的任何东西都不会有机会运行,直到您的时间片结束并且内核抢占您的线程。

使用关键部分将比尝试滚动您自己的用户模式自旋锁更成功。

关于c++ - 将指针从 C 传递到程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954779/

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