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 ...
随机推荐
- C语言程序设计第六次作业--循环结构(2)
(一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...
- python学习之装饰器-
python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...
- Java 反射 Method threw 'java.lang.InstantiationException' exception.
查看这个InstantiationException:异常的api所说的是: 当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该 ...
- 解决$.ajax()在IE10以下失效的问题
一.问题重现 本地的脚本请求测试环境的接口 $.ajax({ url: ***, type: GET, data: data, success: function (data) { **** } }) ...
- UMAIL安装教程
UMAIL安装教程 一.UMAIL虚拟机的创建与安装 首先在VM中选择新建虚拟机 选择下一步 选择稍后安装操作系统 选择Linux系统 版本CentOS 7 64位 选择名称与安装位置 选择下一步 选 ...
- R语言do.call 函数用法详解
虽然R语言有类型很丰富的数据结构,但是很多时候数据结构比较复杂,那么基本就会用到list这种结构的数据类型.但是list对象很难以文本的形式导出,因此需要一个函数能快速将复杂的list结构扁平化成da ...
- Node.js URL
稳定性: 3 - 稳定 这个模块包含分析和解析 URL 的工具.调用 require('url') 来访问模块. 解析 URL 对象有以下内容,依赖于他们是否在 URL 字符串里存在.任何不在 URL ...
- Docker常见仓库Redis
Redis 基本信息 Redis 是开源的内存 Key-Value 数据库实现. 该仓库提供了 Redis 2.6 ~ 2.8.9 各个版本的镜像. 使用方法 默认会在 6379 端口启动数据库. $ ...
- Linux下MySQL 数据库的基本操作
1. 创建数据库相关命令: 首先,下载MySQL相关软件包:aptitude install mysql-server/mysql-client MySQL中的root用户类似于Linux下的root ...
- Docker部署Zabbix+Grafana监控
Docker部署Zabbix+Grafana监控 环境 centos 7 ; Docker 17.12.0-ce ; docker-compose version 1.20.1 2018-4-1 当前 ...