C pthread 编写正确但根本不起作用;为什么?
C pthread written correctly but does not work at all; why?
我正在学习 c 中的线程以备考试,我正在尝试解决以下由教授作为培训提供的练习:
Write a program that accepts an integer number 'n' from command line and creates n threads; then waits their termination.
我试图解决这个问题,但由于某种原因它似乎不起作用。
这是我的代码:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void *StampaThread(void *arg){
char *ret;
strcpy(ret,"Fine thread");
printf("thread %p scritto!\n", arg);
pthread_exits(ret);
}
int main(int argc,char** argv){
pthread_t thread[1000];
void *ret;
if(argc!=2){
perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
int n=atoi(argv[0]);
int i;
for(i=0;i<n;i++){
if(pthread_create(&thread[i],NULL,StampaThread,&i)!=0){
perror("problema nella creazione dei thread\n");
exit(1);
}
if((pthread_join(thread[i],&ret))!=0){
perror("problema nella attesa dei thread\n");
exit(3);
}
printf("%s",(char *)ret);
}
}
return 0;
}
感谢第一个评论区一些开发者的贡献,我找到了正确的代码来解决这个问题;上瘾了,我添加了一些代码来显示整数,而不是程序使用的内存位置。
代码如下:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void *StampaThread(void *arg){
char *ret=(char *)malloc(sizeof(char *));
strcpy(ret,"Fine thread");
printf("thread %d scritto!\n", *(int *)arg);
free(arg);
pthread_exits(ret);
}
int main(int argc,char** argv){
pthread_t thread[1000];
void *ret;
if(argc!=2){
perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
int n=strtol(argv[1],NULL,10);
int i;
int *arg;
for(i=0;i<n;i++){
arg=malloc(sizeof(*arg));
*arg=i;
if(pthread_create(&thread[i],NULL,StampaThread,arg)!=0){
perror("problema nella creazione dei thread\n");
exit(1);
}
}
for(i=0;i<n;i++){
if((pthread_join(thread[i],&ret))!=0){
perror("problema nella attesa dei thread!\n");
exit(3);
}
}
printf("%s",(char *)ret);
}
return 0;
}
我正在学习 c 中的线程以备考试,我正在尝试解决以下由教授作为培训提供的练习:
Write a program that accepts an integer number 'n' from command line and creates n threads; then waits their termination.
我试图解决这个问题,但由于某种原因它似乎不起作用。
这是我的代码:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void *StampaThread(void *arg){
char *ret;
strcpy(ret,"Fine thread");
printf("thread %p scritto!\n", arg);
pthread_exits(ret);
}
int main(int argc,char** argv){
pthread_t thread[1000];
void *ret;
if(argc!=2){
perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
int n=atoi(argv[0]);
int i;
for(i=0;i<n;i++){
if(pthread_create(&thread[i],NULL,StampaThread,&i)!=0){
perror("problema nella creazione dei thread\n");
exit(1);
}
if((pthread_join(thread[i],&ret))!=0){
perror("problema nella attesa dei thread\n");
exit(3);
}
printf("%s",(char *)ret);
}
}
return 0;
}
感谢第一个评论区一些开发者的贡献,我找到了正确的代码来解决这个问题;上瘾了,我添加了一些代码来显示整数,而不是程序使用的内存位置。
代码如下:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void *StampaThread(void *arg){
char *ret=(char *)malloc(sizeof(char *));
strcpy(ret,"Fine thread");
printf("thread %d scritto!\n", *(int *)arg);
free(arg);
pthread_exits(ret);
}
int main(int argc,char** argv){
pthread_t thread[1000];
void *ret;
if(argc!=2){
perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
int n=strtol(argv[1],NULL,10);
int i;
int *arg;
for(i=0;i<n;i++){
arg=malloc(sizeof(*arg));
*arg=i;
if(pthread_create(&thread[i],NULL,StampaThread,arg)!=0){
perror("problema nella creazione dei thread\n");
exit(1);
}
}
for(i=0;i<n;i++){
if((pthread_join(thread[i],&ret))!=0){
perror("problema nella attesa dei thread!\n");
exit(3);
}
}
printf("%s",(char *)ret);
}
return 0;
}