linux里面线程编译运行问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux里面线程编译运行问题相关的知识,希望对你有一定的参考价值。
今天老师讲了多线程编程写了一个很简单的创建线程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个线程里各自享有存储空间也知道,也就是全局变量,他们分别可以修改但互不影响
多线程函数除了要包含头文件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
参考技术A #gcc a.c -o a #此句的-o a说明输出目标文件为“a”;#gcc -Wall-lpthread threadcreatetest.c #此句未注明输出目标文件名,系统默认输出为a.out,所以编译之后执行./a.out文件。
如果上句也没有指明“ -o a ”的话,输出也是a.out,你可以试试 参考技术B -Wall是打开warning的意思,理解为Warnings All.
还想问啥,貌似你问的有点混乱,看不懂追问
就是还有下面的,我们同学今天编译就直接gcc xxx.c -lpthread,,也可以编译,后然./a.out也可运行,今天刚上第一节课,不好意思啊,
编写进程线程常用的linux命令
uname -a : 查看 linux 的版本号
ipcrm: 结束一个进程
lsipc 或 ipcs: 查看进程信息
ipcmk:创建
pstree: 查看系统所有线程
pstree | grep 运行程序名 : 查看对应程序的所有线程
gcc 1.c -g: 将原程序1.c编译成可被 gdb 调试的程序
gdb a.out:调试运行a.out
grep -R "^struct msqid_ds" 结构体原型所在的头文件(当前路径在相关路径下就不需要写):
查看结构体原型
gedit:以记事本的形式查看文件
本人经验之作,望点赞^o^
以上是关于linux里面线程编译运行问题的主要内容,如果未能解决你的问题,请参考以下文章