gpt4 book ai didi

c - pthread 参数的值已更改

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

这是我的主要功能,其中 NO_RECIEVERS = 3。我正在尝试使用我发送的 i 的值来区分作者线程和读者线程。

int main() {
int status, i;
pthread_t tr[NO_RECIEVERS], tw[NO_SENDERS], bd;
i=1;

for(i=1; i<=NO_SENDERS; i++) {
pthread_create(&tw[i-1], NULL, writer, &i);
}

for(i=1; i<=NO_RECIEVERS; i++) {
printf("%d\n", i);
pthread_create(&tr[i-1], NULL, reader, &i);
}

pthread_create(&bd, NULL ,daemon_thread, NULL);

for(i=1; i<=NO_SENDERS; i++) {
pthread_join(tw[i-1], NULL);
}

for(i=1; i<=NO_RECIEVERS; i++) {
pthread_join(tr[i-1], NULL);
}
pthread_join(bd, NULL);

return 0;
}

我的阅读器功能如下

void* reader(void *val) {
int ret, fd, id;
struct mssg data;
id = *(int*)val;
printf("id: %d %d\n", id, *(int*)val);
while(1) {

但是这个函数似乎正在创建具有一些随机值的线程..我得到这样的日志

...
id: 1 1
...
id: 2 2
...
id: 1 1

下次我得到..它是随机的

...
id: 1 1
...
2
id: 2 2
...
id: 4 4

但我分配的值仅限于 1,2,3

最佳答案

您将 &i 传递给您创建的所有线程...因此每个线程都有一个指向 i 的指针,当它们取消引用时读取 的值>i,他们读到的是当时 i 恰好是什么。

如果想在pthread_create的时候传递i的值,建议malloc()一小块内存,将 i 复制给它,并将 malloced 的东西传递给线程(线程可以读取它和 free() 内存。或提供 副本的任何其他方法code>i 为每个创建的线程在不同的位置。

关于c - pthread 参数的值已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25964405/

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