同時読み取りと書き込みをシミュレートしようとしています。何らかの理由で、スレッドは同時にこれを行いません。2 つのスレッドを作成します。これらのスレッドには Sleep(0) が含まれているため、他のスレッドが処理を実行できます。新しいオブジェクトを作成する部分では、スリープ状態にします。
delete this->item; this->item = 0; Sleep(0); this->item = new hallo();
このテストをリリース モードで約 2 時間実行しました。例外やクラッシュはありませんでした。私は何を間違っていますか?
これは私がこれをやろうとする方法です:
#include <Windows.h>
#include <stdio.h>
#include "Source.h"
DWORD WINAPI readVar(LPVOID);
DWORD WINAPI writeVar(LPVOID);
testclass * testobject;
int main()
{
testobject = new testclass();
CreateThread(NULL,NULL,readVar,NULL,NULL,NULL);
CreateThread(NULL,NULL,writeVar,NULL,NULL,NULL);
while(true)
Sleep(10000);
}
DWORD WINAPI readVar(LPVOID)
{
while(true)
{
hallo * testObjectTest = testobject->getValue();
if(!testObjectTest->outpoutSomeData())
printf("ERROR\n\n");
Sleep(0);
}
return NULL;
}
DWORD WINAPI writeVar(LPVOID)
{
while(true)
{
testobject->resetValue();
Sleep(0);
}
return NULL;
}
これらはクラスです:
class hallo
{
public:
hallo() {printf("Object created\n");}
~hallo() {printf("Object removed\n");}
bool outpoutSomeData() { printf("Call\n"); return true; }
};
class testclass
{
private:
hallo * item;
public:
testclass() {this->item = new hallo(); }
hallo * getValue() { return item; }
void resetValue() { delete this->item; this->item = 0; Sleep(0); this->item = new hallo(); }
};
ご参考までに:
- これは簡単なテストです。私は「良いコーディング」にはあまり注意を払いませんでした。
- 私は4つのCPUコアを持っているので、それが可能である必要があります.
- 他のプログラムでこの問題が何度も発生しましたが、ロックで修正しました。ここで、これが発生するテストを作成したいと思います。しかし、それはうまくいきません。