我想知道是否有可能使用「原子訪問」(C++ 11功能)從注入到另一個進程的DLL內的多線程訪問。用std :: atomic <int>安全地連接到程序結構以進行線程訪問?
例如,我們有這樣的計劃:
struct SSomeStructure
{
int value_a;
int value_b;
};
int main()
{
SSomeStructure some_variable;
while(!GetAsyncKeyState('Q'))//loop while Q is not pressed
{
std::cout << some_variable.value_a << some_variable.value_b;
some_variable.value_a = GetTickCount();
some_variable.value_b = -some_variable.value_a;
std::cout << some_variable.value_a << some_variable.value_b;
}
}
而且程序是封閉源代碼,但我disasemlbed了 「SSomeStructure」 結構:
struct SSomeStructure
{
int value_a;
int value_b;
};
現在我正在寫一個DLL這將被注入到進程中,但除了std :: out之外,沒有什麼可以掛鉤的,因此,如果不掛鉤但是創建另一個線程來安全地訪問/修改這些變量,它們需要是原子的,對吧?
所以我想在我的(僞)DLL來創建此:
#include <atomic>
#include <thread>
//disasembled structure, but added syd::atomic
struct SSomeStructure
{
std::atomic<int> value_a;
std::atomic<int> value_b;
};
//start thread when dll loads etc...
void SomeThread()
{
SSomeStructure * some_variable = ObtainAddressOfSomeVariableFromHostProcess();
while(true)
{
some_variable->value_a = 1337;//is this now an atomic operation which is thread-safe?
}
}
會在std ::在我的「黑客」 DLL原子它運行它自己的線程,給安全多線程訪問主機進程中的全局變量? (因爲DLL正在主機進程中原子地訪問該值)?