我正在学习 C 中的多线程性能。当我尝试编写示例代码时,我遇到了一个问题:
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
typedef struct{
int a;
char b;
} args;
void* some_func (void* arg)
{
args *argsa = malloc(sizeof(args));
//copy the content of arg to argsa,
//so changes to arg in main would not affect argsa
*argsa = *(args*) arg;
int i = 10;
for (; i > 0; i--)
{
usleep (1); //to give other threads chances to cut in
printf ("This is from the thread %d\n", argsa->a);
}
free (argsa);
}
int main()
{
pthread_t thread[3];
args ss;
int index = 0;
ss.b = 's';
for (; index <3 ; index++)
{
ss.a = index;
if (pthread_create (thread+index, NULL, some_func, (void*)&ss ))
{
usleep(10);
printf ("something is wrong creating the thread");
}
}
pthread_join ( thread[0], NULL);
pthread_join ( thread[1], NULL);
pthread_join ( thread[2], NULL);
return 0;
}
我知道结构中的 char b 没用,但我只想练习传递结构。我希望代码打印出“这是来自线程 x”,其中 x 是 0、1 或 2。但是,代码目前只给了我 30 次“这是来自线程 2”的信息。我相信有什么问题
*argsa = *(args*) arg;
但我找不到解决这个问题并获得所需输出的方法。
任何帮助,将不胜感激!