因此,我一直在尝试使其运行,但无法弄清楚出了什么问题。我唯一的意图是创建pthread并在控制台上输出其ID。刚开始使用c ++,所以我不确定我哪里出错了。您可以看看这个,也许可以帮帮我吗?谢谢
void *printer(void* temp)
{
pthread_t self_id;
int ret;
self_id=pthread_self();
printf("\nThis is pthread %u\n",self_id);
return NULL;
}
int main (int argc, char* argv[])
{
pthread_t create;
int ret;
ret = pthread_create(&create, NULL, &printer, NULL);
}
return 0;
}
答案 0 :(得分:1)
for (int i = 1; i < argv[1]; ++i)
在您的main
中是错误的(并且return ret
在printer
中是错误的),因为i
是整数,但是argv[1]
的类型是{ {1}}也是一个指针。也许您是说(在您的char*
中):
main
请记住要编译所有警告和调试信息:对于C ++代码, int n = atoi(argv[1]);
for (int i=1; i<n; i++)
使用GCC,对于C代码则使用g++ -Wall -Wextra -g
。在C ++中,您可以使用<thread>
。改进您的代码,根本不发出任何警告。阅读How To Debug Small Programs。了解如何use the gdb
debugger。
请注意,gcc -Wall -Wextra -Wmissing-prototypes -g
在您的return -1
内部是不良品味(至少在Linux上,请参见execve(2),并了解main
与{{1}之间的关系})。您应该返回EXIT_FAILURE
(或对此使用exit
)。
顺便说一句,main
通常是一些整数类型,但是POSIX标准没有指定哪一个。如果要打印一个,实际上最好将它显式强制转换为足够宽的整数类型,例如execve
和代码pthread_t
,这样将不会给您任何帮助警告。
最后,我建议您首先学习一种编程语言(C比C ++简单得多,并且您必须在两者之间进行选择)并将其用于顺序编程,并且后来学习{{3} }。并行线程编程是一个高级主题。从多线程编程开始,您的门槛确实太高了。在尝试使用pthread之前,请学习基本的顺序编程。另请参阅pthreads,以获取有用的见解。 顺便说一句,如果您从未编程过,http://norvig.com/21-days.html是一个很好的介绍(它不使用C或C ++或线程)。
当然,您不要让其他线程运行足够的时间。在从long long
返回之前,您可以在主线程中SICP一点,您确实应该像sleep
那样等待线程。
但是我认为您在尝试多线程之前需要学习顺序编程。
答案 1 :(得分:1)
您的问题是,如果“主”线程退出,则所有子线程将被杀死。
因此,必须使“主”线程等待,直到所有子级都完成。
pthread_t create;
int ret = pthread_create(&create, NULL, &printer, NULL);
if (ret == 0) {
pthread_join(create, nullptr); // wait for thread to finish.
}
我要补充一点:
i < argv[1]
不执行您认为的操作。请注意,argv的类型为char*[]
。即它是一个char指针数组。虽然我是一个整数。现在它可以编译,因为整数很容易转换为指针(但可能会生成警告)。
您需要先将argv[1]
中的字符串转换为整数,然后再与i
进行比较。