我有一个生成多个线程的函数,每次都向它们传递一个不同的字符串,但似乎线程具有相同的字符串。字符串来自套接字。这是代码:
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++;
}
这里我生成两个线程。这两个线程具有相同的字符串,实际上这个字符串是从套接字中出来的最后一个字符串。为什么会发生这种情况,我该如何防止这种情况发生?请帮助我在这里停留几天。
答案 0 :(得分:0)
您应该发布完整的代码。
根据您发布的内容,您的问题似乎是所有线程共享相同的参数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:我强烈建议您对套接字中的所有数据使用strncmp
和strncpy
。