有一个供多个线程调用的"全部函数",请问该函数是线程安全的吗?
比如有下面的一个"全局函数":
void parseData(MyStruct* pMyStruct)
{
.........
}
下面是两个线程函数,其内部都调用了parseData(MyStruct* MyStruct)方法:
UINT workAThread(LPVOID CompletionPortID)
{
....................................
MyStruct* pMyStruct = new MyStruct();
parseData(pMyStruct);
....................................
}
UINT workBThread(LPVOID CompletionPortID)
{
....................................
MyStruct* pMyStruct = new MyStruct();
parseData(pMyStruct);
....................................
}
那么"全局函数"void parseData(MyStruct* pMyStruct)到底是不是线程安全的呢?
由于是多线程,我们可知workAThread和workAThread都有自己的线程运行空间,那么void parseData(MyStruct* pMyStruct)到底会不会复制两份代码到workAThread和workAThread各自的运行空间中,还是真的作为一个全局函数?如果是一个真的全局函数,我们在编写函数void parseData(MyStruct* pMyStruct)时该注意些什么呢?
期待各位高手的回答,并说明理由
void parseData(MyStruct* pMyStruct)
{
.........
}
下面是两个线程函数,其内部都调用了parseData(MyStruct* MyStruct)方法:
UINT workAThread(LPVOID CompletionPortID)
{
....................................
MyStruct* pMyStruct = new MyStruct();
parseData(pMyStruct);
....................................
}
UINT workBThread(LPVOID CompletionPortID)
{
....................................
MyStruct* pMyStruct = new MyStruct();
parseData(pMyStruct);
....................................
}
那么"全局函数"void parseData(MyStruct* pMyStruct)到底是不是线程安全的呢?
由于是多线程,我们可知workAThread和workAThread都有自己的线程运行空间,那么void parseData(MyStruct* pMyStruct)到底会不会复制两份代码到workAThread和workAThread各自的运行空间中,还是真的作为一个全局函数?如果是一个真的全局函数,我们在编写函数void parseData(MyStruct* pMyStruct)时该注意些什么呢?
期待各位高手的回答,并说明理由
...全文
相关推荐
多线程向线程函数传递多个参数实例
基于MFC对话框类创建的线程,传递给线程函数2个参数,线程函数调用窗口类控件操作等。
线程安全与可重入函数
一,什么是线程安全? 当对一个复杂对象进行某种操作时,从操作开始到操作结束,被操作的对象往往会经历若干非法的中间状态。调用一个函数(假设该函数是正确的)操作某对象常常会使该对象暂时陷入不可用的状态(通常称为不稳定状态),等到操作完全结束,该对象才会重新回到完全可用的状态。如果其他线程企图访问一个处于不可用状态的对象,该对象将不能正确响应从而产生无法预料的结果,如何避免这种情况发生是线
线程安全函数
线程安全函数
浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题
下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助
可重入函数与线程安全函数
可重入函数与线程安全函数,基本知识。可以看看。


进程/线程/DLL
