多线程有关全局变量和局部变量的区别,注意a,b
2005-12-05 12:09
561 查看
调用
void __fastcall TForm1::Button1Click(TObject *Sender)
{
new ThreadA(1,1,false);
new ThreadA(2,2,false);
}
//---------------------------------------------------------------------------
线程定义
class ThreadA : public TThread
{
private:
protected:
void __fastcall Execute();
public:
__fastcall ThreadA(int aa,int bb,bool CreateSuspended);
int mya;
int myb;
};
//---------------------------------------------------------------------------
int a; //书上说这种变量被所有线程共用的
int __thread b; //书上说这种变量每个线都会有自己私有的一份
__fastcall ThreadA::ThreadA(int aa,int bb,bool CreateSuspended)
: TThread(CreateSuspended)
{
mya=aa;
myb=bb;
}
//---------------------------------------------------------------------------
void __fastcall ThreadA::Execute()
{
randomize();
a=mya;
b=myb;
Sleep(rand()%5000);
if(mya==a)
Application->MessageBox((AnsiString("a显示两值相等信息")+a).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
else
Application->MessageBox((AnsiString("a显示两值 不 等信息")+a).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
if(myb==b)
Application->MessageBox((AnsiString("b显示两值相等信息")+b).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
else
Application->MessageBox((AnsiString("b显示两值 不 等信息")+b).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
}
//---------------------------------------------------------------------------
可以看出,int __thread b;的不同之处。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
new ThreadA(1,1,false);
new ThreadA(2,2,false);
}
//---------------------------------------------------------------------------
线程定义
class ThreadA : public TThread
{
private:
protected:
void __fastcall Execute();
public:
__fastcall ThreadA(int aa,int bb,bool CreateSuspended);
int mya;
int myb;
};
//---------------------------------------------------------------------------
int a; //书上说这种变量被所有线程共用的
int __thread b; //书上说这种变量每个线都会有自己私有的一份
__fastcall ThreadA::ThreadA(int aa,int bb,bool CreateSuspended)
: TThread(CreateSuspended)
{
mya=aa;
myb=bb;
}
//---------------------------------------------------------------------------
void __fastcall ThreadA::Execute()
{
randomize();
a=mya;
b=myb;
Sleep(rand()%5000);
if(mya==a)
Application->MessageBox((AnsiString("a显示两值相等信息")+a).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
else
Application->MessageBox((AnsiString("a显示两值 不 等信息")+a).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
if(myb==b)
Application->MessageBox((AnsiString("b显示两值相等信息")+b).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
else
Application->MessageBox((AnsiString("b显示两值 不 等信息")+b).c_str(),AnsiString(ThreadID).c_str(),MB_OK);
}
//---------------------------------------------------------------------------
可以看出,int __thread b;的不同之处。
相关文章推荐
- 全局变量和局部变量在内存里的区别?
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- C++ 局部静态变量,全局变量,全局静态变量,局部变量的区别和联系
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量,局部变量、静态全局变量、静态变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量和局部变量在内存里的区别?
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
- 全局变量和局部变量的区别以及实现
- 全局变量,局部变量,静态全局变量,静态局部变量的区别
- 全局变量和局部变量在内存里的区别
- 全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别 .
- Java多线程操作局部变量与全局变量
- [转]C/C++关于全局变量和局部变量初始化与不初始化的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- static变量与全局、局部变量的区别