我正在使用一些.C文件和.CPP文件的代码库。
系统中的多个线程调用C文件中的一些函数,如下所示。
void CalculateCrc(PWORD pwCRC, PBYTE pbyBuffer, DWORD dwBufferLen)
{
WORD wFCS = 0xffff;
ASSERT(pbyBuffer);
ASSERT(pwCRC);
while(dwBufferLen--)
{
wFCS = (WORD)(wFCS >> 8) ^ tbl_FCS[(wFCS ^ *pbyBuffer++) & 0xff];
}
wFCS ^= 0xffff; // complement
*pwCRC = wFCS;
}
对于每个调用线程,是否会有参数[pwCRC,pbyBuffer,dwBufferLen]和函数[WORD wFCS]的非静态数据成员的副本,或者只有一组数据被所有线程共享,这将导致数据损坏并使来自多个线程的调用不安全?
我不是以英语为母语的人。如果问题问得不清楚,请原谅。
谢谢你的时间。
最佳答案
我相信每个线程都有自己的堆栈,这是生成进程堆栈的副本(我希望我在这一点上技术上是正确的)。但它们确实共享地址空间和堆。
所以在产卵之前存在的任何东西都将被分享。之后创建的任何内容都是线程本地的。由于所有内容都是按值传递的,并且数据成员是非静态的,所以它将被创建为线程本地的。
你的功能本身是安全的。但是,由于使用指针,因此需要注意两个线程不能在同一内存区域上工作。变量是安全的,内存不是。
关于c++ - 从多个线程在C文件中调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23465704/