我试图玩线程,到目前为止,使用下面的代码,我做得很好。我想要打印执行线程的当前索引,但我遇到了一些问题。
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *runner(void *param);
int main(int argc, char *argv[])
{
int i, policy;
pthread_t tid[NUM_THREADS];
pthread_attr_t attr;
pthread_attr_init(&attr);
if(pthread_attr_getschedpolicy(&attr, &policy) != 0)
fprintf(stderr, "Unable to get policy.\n");
else{
if(policy == SCHED_OTHER)
printf("SCHED_OTHER\n");
else if(policy == SCHED_RR)
printf("SCHED_RR\n");
else if(policy == SCHED_FIFO)
printf("SCHED_FIFO\n");
}
if(pthread_attr_setschedpolicy(&attr, SCHED_FIFO) != 0)
fprintf(stderr, "Unable to set policy.\n");
/* create the threads */
for(i = 0; i < NUM_THREADS; i++)
printf("Hi, I'm thread #%d\n", i);
pthread_create(&tid[i], &attr, runner, NULL);
/* now join on each thread */
for(i = 0; i < NUM_THREADS; i++)
pthread_join(tid[i], NULL);
}
/* Each thread will begin control in this function */
void *runner(void *param)
{
/* do some work... */
printf("Hello world!");
pthread_exit(0);
}
我试图打印当前正在执行的线程以及&#34; Hello world!&#34;。但是,输出就是这个......
SCHED_OTHER
Hello, I'm thread #0
Hello, I'm thread #1
Hello, I'm thread #2
Hello, I'm thread #3
Hello, I'm thread #4
Segmentation fault (core dumped)
到目前为止,我已经尝试过发布
了ulimit -c unlimited
我可以在代码中调整什么来实现我的目标?
答案 0 :(得分:1)
此
for(i = 0; i < NUM_THREADS; i++)
printf("Hi, I'm thread #%d\n", i);
pthread_create(&tid[i], &attr, runner, NULL);
应该是
for(i = 0; i < NUM_THREADS; i++) {
printf("Hi, I'm thread #%d\n", i);
pthread_create(&tid[i], &attr, runner, NULL);
}
在您的代码中,您只创建一个线程并尝试加入 5个线程。
答案 1 :(得分:0)
你忘了在大括号中加上一句话:
for(i = 0; i < NUM_THREADS; i++)
printf("Hi, I'm thread #%d\n", i);
pthread_create(&tid[i], &attr, runner, NULL);
要在for循环中执行的多个语句必须用括号括起,否则只调用其中的第一个,在这种情况下为printf("Hi, I'm thread #%d\n", i)
。解决方案:
for(i = 0; i < NUM_THREADS; i++)
{
printf("Hi, I'm thread #%d\n", i);
pthread_create(&tid[i], &attr, runner, NULL);
}