Linux下多线程编程遇到的一些问题
今天在学习了Linux的多线程编程的基础的知识点。于是就试着做了一个简单的Demo。本以为会得到预期的结果。不成想却遇到了意想不到的问题。
代码展示
我的C 代码很简单,就是一个简单的示例程序,如下:
#include <stdio.h>
#include <stdlib.h>
#include<pthread.h>
int sum ;
void* runner(void *param);
int main( int argc, char*argv[])
{
pthread_t tid;
pthread_attr_t attr;
if(argc != 2){
fprintf(stderr,"usage : a.out<integer value>\n");
return -1;
}
if(atoi(argv[1])<0){
fprintf(stderr,"%d must be >= 0 \n",atoi(argv[1]));
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,argv[1]);
pthread_join(tid,NULL);
printf("Sum = :%d\n",sum);
}
void* runner(void *param){
int i , upper = atoi(param);
sum = 0 ;
for(i = 1; i < upper ; i++){
sum += i ;
}
pthread_exit(0);
}
初遇问题
码完代码我就迫不及待的想要进行编译了,然而系统却提示给了我这样的问题。
g++ -o bin/Debug/PThreadTest obj/Debug/main.o
obj/Debug/main.o:在函数‘main’中:
/home/mark/Code/C/PThreadTest/main.c:25:对‘pthread_create’未定义的引用
/home/mark/Code/C/PThreadTest/main.c:26:对‘pthread_join’未定义的引用
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
尝试着解决问题
看到了这样的提示,感觉有可能是Complier的问题吧。一开始我也是不理解到底是为什么会这样。然后我就在网上搜索了一下这些个关键字。网上的答案不一而足,说什么的都有。对于咱这种菜鸟级的入门新手而言,只能去尝试人家的解决方案。所以结果可想而知了,要么成功了,要么失败了。而一般后者出现的概率比较的多。
第一种方式:改变编译器的路径,到setting–>complier–>link complier.然而这并没有解决我的问题,编译过之后,仍旧还是这搁错误
第二种方式:网上说Pthread并不是Linux的默认的库,连接时需要使用库libpthread.a。也就是在编译的时候 添加在*.c 文件的后面。这个方法在我的项目中,竟然成功的运行了。
gcc main.c -lpthread -o Main
总结
在遇到了这个问题的时候,从一开始的摸不着头脑,到慢慢的摸索着成功的道路,最后解决问题。我想这就是最基本的解决问题的方式吧。不是说解决问题了,就够了。而是在解决问题的过程中进行不断的思考,总结。这样在今后遇到类似的问题的时候,我们才能更加高效的区解决问题。
编程之路比较的坎坷,脚踏实地的思考,才能最快的解决问题。
Linux下多线程编程遇到的一些问题的更多相关文章
- Linux下多线程编程
一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...
- Linux下多线程编程-信号量
今天来谈谈线程的同步--信号量. 首先来看看一些概念性的东西: 如进程.线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行:B依言执行,再将结果给 ...
- Linux下多线程编程中信号量介绍及简单使用
在Linux中有两种方法用于处理线程同步:信号量和互斥量. 线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作.如果一个程序中有多个线程试图改变一个信号量的值,系统将保 ...
- [转]Linux 的多线程编程的高效开发经验
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...
- 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
- Linux 的多线程编程的高效开发经验(转)
http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...
- Linux 的多线程编程的高效开发经验
http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...
- Linux下的编程实战【转】
一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...
- linux 下 poll 编程
poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...
随机推荐
- mycat 1.6 简单的操作实例
环境: centos7.4 + mysql5.7.20 + mycat1.6单台主机上安装了5台mysql_5.7.20 实例(3306,3307,3308,3309,3310)3306为独立实例 ( ...
- rasa_core:基于机器学习的对话引擎
用机器学习管理你的对话,让它提升每一个对话.Rasa Core引导对话,考虑对话的历史和外部环境. 而不是成千上万的规则,Rasa 从真正的对话中挑选模式. 现在是扔掉你的状态机的时候了! Manag ...
- 数组查找算法的C语言 实现-----线性查找和二分查找
线性查找 Linear Search 用户输入学生学号的成绩 二分查找 Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵
- 指尖大冒险H5小游戏
前些天看了一篇很赞的文章,又因为想学习phaser,所以有了这个案例,在线预览可以点下方链接. 本案例中,核心原理是按文章中所提到的内容制作,整体遵循"大道至简"的原则开发,其实是 ...
- (转载)JVM知识小集
1. 内存模型以及分区,需要详细到每个区放什么. 2. 堆里面的分区:Eden,survival from to,老年代,各自的特点. 3. 对象创建方法,对象的内存分配,对象的访问定位. 4. GC ...
- Create database 创建数据库
首先在ORACLE用户下进入.bash_profile文件 [oracle@linux02 ~]$ vi .bash_profile export ORACLE_SID=hldbexport ORAC ...
- 利用JAVA多线程来提高数据处理效率
肿瘤大数据挖掘中经常需要处理上百亿行的文本文件,这些文件往往高达数百GB,假如文件结构简单统一,那么用sed和awk 处理是非常方便和快速的.但有时候会遇到逻辑较为复杂的处理流程,这样我一般会用JAV ...
- Java 零散笔记
运算符: 整数被0除将会产生一个异常,而浮点数被0除会得到无穷大或NaN结果. 二元运算符: 如果运算符得到一个值,其类型与左侧操作数的类型不用,就会发生强制类型转换. int x = 0; x += ...
- 整理的Java List Set Map是否有序,元素是否允许重复
整理的Java List Set Map是否有序,元素是否允许重复的说明,如下图:
- Save results to different files when executing multi SQL statements in DB Query Analyzer 7.01
1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainl ...