gpt4 book ai didi

c - pthread 和私有(private)数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:17 24 4
gpt4 key购买 nike

在这种情况下如何使用 pthreads?代码接收来自 stdin 的请求,并根据一些规则返回结果。但是当我创建一个线程时,所有线程共享 id 和 url 的值。示例:

void * filter(void * data){
int id;
char url[1024];
sscanf((char *) data, "%d %1024s", &id, url);
sleep(id);
printf("%s\n", url);
}

while(fgets(line, BUFFER, stdin)!=NULL)
pthread_create(&thread, NULL, &filter, (void *) line);

--- 从标准输入接收

1个2 两个3 三4 四五五

--- 输出

一个三四五五个

-- 但结果一定是

一个二三四五个

有办法解决吗?谢谢!

最佳答案

如您所见,所有线程都将传递一个指向相同数据的指针,并且 fgets 将在每次调用时覆盖该数据。所以你的输出会有点随机,而且可能会损坏。

您可以将读取的行的副本交给每个线程,并让每个线程释放它(例如)。

while (fgets(...))
pthread_create(..., (void*)strdup(line));

在线程过程中,您应该检查传入的数据是否不为空(如果 strdup 未能为副本分配足够的内存可能会发生),并添加:

free(data);

一旦你完成了它的工作。

为每个线程设置一个单独的(静态)缓冲区也可以,但您必须事先知道要启动多少缓冲区(或进行一些动态重新分配或类似操作)。

关于c - pthread 和私有(private)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687186/

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