別のプロセスに挿入された DLL 内からのマルチスレッドアクセスに「アトミックアクセス」(C++11 機能) を使用できるかどうか疑問に思っています。
たとえば、次のプログラムがあります。
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;
}
}
プログラムはクローズド ソースですが、「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?
}
}
独自のスレッドを実行する「ハック」dll の std::atomic は、ホスト プロセスのグローバル変数への安全なマルチスレッド アクセスを提供しますか? (DLLがホストプロセスでアトミックに値にアクセスしているためですか?)