gpt4 book ai didi

multithreading - 无法将不同的字符串传递给多个线程

转载 作者:行者123 更新时间:2023-12-03 12:09:23 27 4
gpt4 key购买 nike

我有一个函数,它将生成多个线程,并且每次都将不同的字符串传递给它们,但是似乎这些线程具有相同的字符串。字符串来自套接字。这是代码:

pthread_t *MirrorManager;

MirrorManager = malloc(sizeof(pthread_t)*th_size);
if( MirrorManager == NULL ) { perror("malloc"); exit(1); }
/* -------------------------------------- */

int th_num = 0;

while( true )
{
received = 0;

/* Read the desired readable size */
if( read(newsock, &size, sizeof(size)) < 0 )
{ perror("Read"); exit(1); }

/* Read all data */
while( received < size )
{
if( (nread = read(newsock, buffer + received, size - received)) < 0 )
{ perror("Read"); exit(1); }

received += nread;
}

if( strcmp(buffer, "end") == 0 ) { break; }


printf("Received string: %s\n",buffer);

/* Create thread */
strcpy(th_str, buffer);
if( (err = pthread_create(&MirrorManager[th_num], NULL, thread_start, (void*) th_str)) == true )
{ show_error("pthread_create", err); }

/* Take next thread */
th_num++;
}

在这里,我生成两个线程。这两个线程具有相同的字符串,实际上,该字符串是将从套接字输出的最后一个字符串。为什么会发生这种情况,我该如何预防呢?请帮助我现在已经在这里停留了几天。

最佳答案

您应该发布完整的代码。

给定您发布的内容,看来您的问题是所有线程共享相同的参数th_str:

pthread_create(&MirrorManager[th_num], NULL, thread_start, (void*) th_str))

相反,您应该为每个线程分配一个单独的 th_str,因为您正在为每个线程传递指向它的指针,而不是字符串本身。
th_str = malloc(strlen(buffer));
strcpy(th_str, buffer);

然后确保每个线程都释放传递给它的指针。

PS:我强烈建议您对套接字上的所有数据使用 strncmpstrncpy

关于multithreading - 无法将不同的字符串传递给多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192063/

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