C 从多个线程调用相同的函数
我用C编写了一个程序,它将启动两个线程(UDP/TCP)。每个线程将发送数据包 我在两个线程中每5秒发送一次数据包。两个线程将调用相同的函数,如下所示: 没有修改全局变量,只有参数在共享函数中使用 因为没有更新共享变量,所以两个线程调用同一个函数是安全的?这会导致任何未定义的行为吗C 从多个线程调用相同的函数,c,multithreading,C,Multithreading,我用C编写了一个程序,它将启动两个线程(UDP/TCP)。每个线程将发送数据包 我在两个线程中每5秒发送一次数据包。两个线程将调用相同的函数,如下所示: 没有修改全局变量,只有参数在共享函数中使用 因为没有更新共享变量,所以两个线程调用同一个函数是安全的?这会导致任何未定义的行为吗 //create message int getMsg(char * msg, int size) { char strMsg[size]; sprintf(strMsg, "%d", 10);
//create message
int getMsg(char * msg, int size)
{
char strMsg[size];
sprintf(strMsg, "%d", 10);
strcat(msg, strMsg);
return EXIT_SUCCESS;
}
// tcp
void send1()
{
while(1)
{
// create message to send
char str[100];
int rVal;
rVal = getMsg(str, 100);
if(rVal != EXIT_FAILURE)
{
// send packet
sendto(fd, strlen(str), 0, dest, sizeof(*dest));
}
usleep(5000000);
}
}
// udp
void send2()
{
while(1)
{
// create message to send
char msg[200];
int rVal;
rVal = getMsg(msg, 200);
if(rVal != EXIT_FAILURE)
{
// send packet
sendto(fd, strlen(str), 0, dest, sizeof(*dest));
}
usleep(5000000);
}
}
如果函数不是线程安全的,则可能发生未定义的行为。 例如,如果它使用一些
全局数据
,则内部有一些静态变量
或作为参数指针接收,以便每个线程的某些数据相同
所以静态变量的使用应该被删除,全局和公共数据的使用应该被一些同步机制包装,比如Criticalsections
回答您的问题,您的
getMsg
函数是安全的。是的,通过多个线程调用公共函数是安全的,只要该函数不使用全局或静态变量。每个线程在各自的调用堆栈上创建一个单独的被调用函数副本。除非您正在更改另一个线程将要访问的数据,否则一切都会正常。与多线程无关的一个问题是,您将指向未初始化数组的指针传递到getMsg()
该函数尝试附加到那些未初始化的字符串。您正在附加一个固定字符串,因此没有理由分配str
或在getMsg