【发布时间】:2020-03-08 18:48:12
【问题描述】:
我正在尝试编写一个程序,它将产生任意数量的线程,类似于我在Convert a process based program into a thread based version? 中的代码,它使用进程来完成我想要完成的事情,到目前为止我有以下代码,我目前收到很多警告,但我真的想知道我是否正在接近我正在尝试做的事情。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void *runner(void *param); //the thread
int main(int argc, char *argv[]) {
pthread_t tid = gettid();
pthread_attr_t attr;
if (argc != 2){
fprintf(stderr, "Usage: a.out <integer value>\n");
return -1;
}
if (atoi(argv[1]) < 0) {
fprintf(stderr, "Argument %d must be non negative\n", atoi(argv[1]));
return -1;
}
printf("My thread identifier is: %d\n", tid);
// default attributes
pthread_attr_init(&attr);
// create the thread
pthread_create(&tid, &attr, runner, argv[1]);
// wait for the thread to exit
pthread_join(tid, NULL);
}
void *runner(void *param){
//int i, upper = atoi(param);
int i;
srand48(gettid());
int max = nrand()%100;
if (max > 0){
for (i=1; i<=max; i++){
printf("Child %d executes iteration\n", param, i);
}
}
pthread_exit(0);
}
感谢我能得到的任何指导!
【问题讨论】:
-
您似乎忘记了包含您希望我们解决的警告。
-
@ikegami 好吧,有很多......这让我相信我的语法是错误的,但我可以自己解决这个问题,我更担心代码不是为我想要做的事情工作,从逻辑上讲,我编写的代码应该正确地产生一些线程还是我错过了一些部分?
-
关于:`pthread_t tid = gettid();` 这将返回
main()函数的 TID,即iffy,程序不感兴趣。 -
关于;
printf("Child %d executes iteration\n", param, i);这是thread,而不是child process -
thread id是通过调用pthread_create()(第一个参数)生成的
标签: c multithreading process operating-system pthreads