gpt4 book ai didi

c - 防止线程特定数据被覆盖 C

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

我正在尝试用 C 语言创建一个简单的聊天程序。对于每个客户端,我正在创建一个新线程,以便服务器可以同时处理与多个用户的通信。我将每个用户数据存储在如下结构中:

struct User                     /*structure to handle all clients*/
{
int port;
char username[10];
struct User*connected;
struct User*next;
};

在主线程中,我创建一个新线程并为用户传入结构:

 pthread_create(&thr,NULL,server,(void*)&args);

这是为每个用户完成的。

现在,当创建每个新线程时,我从要在线程中使用的参数中复制用户结构。

   void *server(void * arguments) 
{
struct User*cur_user = arguments;
}

这对第一个用户来说工作正常,但是,当新用户加入时,参数中的信息将被覆盖。

我理解线程在程序中共享数据。但是,有没有一种方法可以复制参数并将它们相同到线程中的局部变量,以便它们只是线程范围?换句话说,如何在线程内使用 cur_user 变量而不让其他线程修改其内容?

编辑:

我试图复制内存,但运气不佳:

struct User args;                     
struct User*new_arg = malloc(sizeof(struct *new_arg));
memcpy(new_arg, *args, sizeof(new_arg))

我的 malloc 有问题吗?

最佳答案

指针只是一个指针。您为每个线程提供了一个指向相同 args 结构的指针。所以他们每个人都有自己的指针,但他们都指向同一件事。由于它们随后都通过指针访问参数,因此它们都访问相同的参数。

您实际上需要为它们中的每一个赋予它们自己的结构,而不仅仅是它们自己指向同一结构的指针。使用 malloc() 分配一个新结构,填充它,并将它交给服务器/线程(它需要在它死之前释放它。)

关于c - 防止线程特定数据被覆盖 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237880/

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