gpt4 book ai didi

c - 即使在下一次迭代之后,是否在循环中局部声明了一个变量,该循环创建了一个可以在被调用线程中安全使用的线程?

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:47 25 4
gpt4 key购买 nike

我对 C 中的变量范围和内存管理有疑问。我正在编写一个程序来监听套接字连接,然后启动一个新线程来处理该客户端。主 while() 循环可以启动许多单独的线程。我的问题是:

如果我不使用动态内存分配(没有 malloc()),而是有一个本地声明的变量,如下所示,在被调用的线程中使用该变量是否安全,即使在循环的下一次迭代发生之后?

while(1)
{
// Accept new socket connection here
// ...

pthread_t pt;
struct mypthreadargs args;

rc = pthread_create(&pt, NULL, handle_client, &args);
// The handle_client() function makes extensive use of the 'args' variable
}

创建线程后,args 变量(和 pt 变量)会发生什么变化?一旦 while() 循环重新开始,内存是否丢失,或者像我一样使用它们是否安全?

谢谢!

最佳答案

每次迭代完成后,您将失去对 ptargs 的所有权。访问它们是未定义的行为。

要解决评论问题,您可以在循环外定义这两种类型的数组,或将它们设为全局:

pthread_t pt[...];
struct mypthreadargs args[...];
while(1)
{
...
}

当然,您必须确保在线程完成之前不会离开该范围。

关于c - 即使在下一次迭代之后,是否在循环中局部声明了一个变量,该循环创建了一个可以在被调用线程中安全使用的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com