linux里面线程编译运行问题
今天老师讲了多线程编程写了一个很简单的创建线程C程序,然后就编译。C文件名为threadcreatetest.c格式是#gcc-Wall-lpthreadthreadcr...
今天老师讲了多线程编程写了一个很简单的创建线程C程序,然后就编译。C文件名为threadcreatetest.c
格式是#gcc -Wall-lpthread threadcreatetest.c
我就是想问问和编译C里面有什么区别?#gcc a.c -o a这个前面gcc是编译,a.c是源文件名,a是目标文件名,然后运行时./a但是多线程里面是怎么的呢?我看不懂 -Wall后然运行怎么又是/a.out 呢?有点搞不懂了。。。希望高手说详细点,刚学。。。
threadcreatetest.c源文件为
#include<pthread.h>
#include<stdio.h>
void *create(void *arg)
{
printf("new thread created ......");
}
int main(int argc,char *argv[]){
pthread_t tidp;
int error;
error=pthread_create(&tidp,NULL,create,NULL);
if(error!=0){
printf("pthred_create is not created...");
return -1;
}
printf("pthread_create is created.....");
return 0;
}最上面这个create函数什么意思?主函数里面调用了的?我看貌似没调用哇。。后面if语句能看懂,就是不懂怎么传参的,全局变量在2个线程里各自享有存储空间也知道,也就是全局变量,他们分别可以修改但互不影响 展开
格式是#gcc -Wall-lpthread threadcreatetest.c
我就是想问问和编译C里面有什么区别?#gcc a.c -o a这个前面gcc是编译,a.c是源文件名,a是目标文件名,然后运行时./a但是多线程里面是怎么的呢?我看不懂 -Wall后然运行怎么又是/a.out 呢?有点搞不懂了。。。希望高手说详细点,刚学。。。
threadcreatetest.c源文件为
#include<pthread.h>
#include<stdio.h>
void *create(void *arg)
{
printf("new thread created ......");
}
int main(int argc,char *argv[]){
pthread_t tidp;
int error;
error=pthread_create(&tidp,NULL,create,NULL);
if(error!=0){
printf("pthred_create is not created...");
return -1;
}
printf("pthread_create is created.....");
return 0;
}最上面这个create函数什么意思?主函数里面调用了的?我看貌似没调用哇。。后面if语句能看懂,就是不懂怎么传参的,全局变量在2个线程里各自享有存储空间也知道,也就是全局变量,他们分别可以修改但互不影响 展开
3个回答
展开全部
gcc xxx.c -lpthread 其中的-l是指包含的lib库,具体写法可以man gcc看下
多线程函数除了要包含头文件pthread.h外还必须要包含lib库pthread
pthread_create是创建线程,但具体的线程里面做什么事是在void *create(void *arg)里,这个函数名是自己任意区的,但返回值和参数一般都是void*类型,因为pthread_create函数的定义就是这样
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
多线程函数除了要包含头文件pthread.h外还必须要包含lib库pthread
pthread_create是创建线程,但具体的线程里面做什么事是在void *create(void *arg)里,这个函数名是自己任意区的,但返回值和参数一般都是void*类型,因为pthread_create函数的定义就是这样
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
参考资料: http://baike.baidu.com/view/1797052.htm
展开全部
#gcc a.c -o a #此句的-o a说明输出目标文件为“a”;
#gcc -Wall-lpthread threadcreatetest.c #此句未注明输出目标文件名,系统默认输出为a.out,所以编译之后执行./a.out文件。
如果上句也没有指明“ -o a ”的话,输出也是a.out,你可以试试
#gcc -Wall-lpthread threadcreatetest.c #此句未注明输出目标文件名,系统默认输出为a.out,所以编译之后执行./a.out文件。
如果上句也没有指明“ -o a ”的话,输出也是a.out,你可以试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-Wall是打开warning的意思,理解为Warnings All.
还想问啥,貌似你问的有点混乱,看不懂
还想问啥,貌似你问的有点混乱,看不懂
追问
就是还有下面的,我们同学今天编译就直接gcc xxx.c -lpthread,,也可以编译,后然./a.out也可运行,今天刚上第一节课,不好意思啊,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询