1、参考学习大神网址:http://blog.csdn.net/ithomer/article/details/6063067

#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h> pthread_t main_tid; void *func(void *arg)
{
while()
{
printf("子线程:Hello,world!\r\n"); sleep();
}
} int main()
{
int err; err = pthread_create(&main_tid, NULL, func, NULL); //创建线程 if(err != )
{
printf("create thread error: %s/n",strerror(err));
return ;
} printf("main thread: pid: %u tid: %u (0x%x)/n",
(unsigned int)getpid(),
(unsigned int)pthread_self(),
(unsigned int)pthread_self());
/* while(1)
{
printf("主线程:Hello,world!\r\n"); sleep(2);
} */ return ;
}

函数一:pthread_create

函数声明

int pthread_create(pthread_t *restrict_tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

返回值

若成功则返回0,否则返回出错编号!!!

参数

pthread_t *restrict_tidp:   第一个参数为指向线程标识符的指针。

const pthread_attr_t *restrict_attr:    第二个参数用来设置线程属性。

void*(*start_rtn)(void*):     第三个参数是线程运行函数的起始地址。

void *restrict arg:        最后一个参数是运行函数的参数。

另外

在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库.

函数二:strerror(int errnum

errnum:错误标号,通常用errno(标准错误号,定义在errno.h中)

通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。

函数三:getpid()

    函数说明:getpid函数用来取得目前进程的进程ID,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。
    返回值:目前进程的进程ID
 
   函数四:pthread_self函数作用:获得线程自身的ID。
 
     函数五: sleep,类似FreeRTOS的vTaskDelay
    1. sleep的精度是秒
    2. usleep的精度是微妙,不精确

Makefile:编写如下:

  
# 参考大神博客地址:http://blog.csdn.net/haoel/article/details/2887
# http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html
# 为每一个 *.c文件生成 *o文件。
  # 连接每一个*.o文件,生成可执行文件。
# make 过程 如下
# 、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
# 、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
# 、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
# 、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
# 、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。 # 根据Makefile 的过程1。应该第一步:在所在的thread.c 文件路径下,新建一个文件名字为 Makefile”或“makefile”的文件。
# 根据Makefile 的过程2、。应该第二步:用 vim 打开 Makefile文件,第一行写代码 edit : thread.o edit:thread.o #可执行文件edit 由 thread.o 组成(对Makefile来说 这个edit 就是最终的目标文件,即执行文件)
gcc -o edit thread.o # 这句代码的意思是:将thread.o连接成可执行的二进制文件edit 参考GCC语法:http://blog.csdn.net/tomatofly/article/details/6035363
thread.o:thread.c # 这句代码的意思是:thread.o依赖关系是 thread.c 和 stdio.h 两个文件,也就是说 如果这两个文件有一个改动的,thread.o就会被重新编译
gcc -c thread.c # 这句代码的意思是:只编译thread.c,成功时输出目标文件thread.o 参考GCC语法:http://blog.csdn.net/tomatofly/article/details/6035363

跟我一起学Linux-线程创建,类似FreeRTOS创建任务的更多相关文章

  1. linux线程笔记1之创建线程

    1 线程与进程的对比 这里有一个笔记详细的阐述 http://blog.csdn.net/laviolette/article/details/51506953 2 创建线程函数 int pthrea ...

  2. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  3. Linux线程-创建

    Linux的线程实现是在内核以外来实现的,内核本身并不提供线程创建.但是内核为提供线程[也就是轻量级进程]提供了两个系统调用__clone()和fork (),这两个系统调用都为准备一些参数,最终都用 ...

  4. 三十六、Linux 线程——线程基本概念及线程的创建和终止

    36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段.代码段和堆栈段. 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存 ...

  5. 十天学Linux内核之第七天---电源开和关时都发生了什么

    原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差,刚开始可能是新鲜感以及很多读者的鼓励,现在就是想快点完成自 ...

  6. 十天学Linux内核之第二天---进程

    原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲 ...

  7. linux线程的实现

    首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情.这在处理异步事件如异步IO时特别有用.内核线程的使用是廉价的,唯一使用 ...

  8. linux线程的实现【转】

    转自:http://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个 ...

  9. Linux线程学习(一)

    一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可 ...

随机推荐

  1. FlatBox-WordPress Responsive Flat Design Theme

    FlatBox A beautifully FlatBox with different colors. You can upload your own logo & favicon, cus ...

  2. svg矢量图标在html中的使用, (知识点:1.通过h5中的css实现点击变色,2.一个svg文件包含多个图标)

    svg矢量文件体积小,不变形,比传统的png先进,比现在流行的icon-font灵活.然而在使用过程中还是遇到了很多坑.今天花了一天时间把经验整理出来,以供后来者借鉴.如果您从本文收益,请留言mark ...

  3. swiper动态改变滑动内容

    假设当前显示的是1,往左滑动一个递减1,往右滑动一个递增1 body下面添加如下代码 <div class="swiper-container temp"> <d ...

  4. MongoDB 更改数据库位置

    MongoDB在Windows中默认的数据库目录是 C:\data.如果在没有该目录的情况下,执行命令mongod,则会报如下错误: 如果我们不想把mongoDB的数据库放在C盘,可以使用如下两种方法 ...

  5. 上海ctf2017 pwn100 && pwn200

    前言 分析的 idb 文件在这: https://gitee.com/hac425/blog_data/tree/master/shanghaictf pwn100 程序是一个经典的 堆管理程序,基本 ...

  6. redis 序列化get、set获取不到原因记录

    最近项目里面出现了个bug,把数据从数据库中读取后又存取到redis里面,之后再读取.奇怪的是,有一个 字段读取不到. public class Circle { private String id; ...

  7. maven(11)-聚合多模块

      聚合项目 一些开源项目,都会把自己的源代码公开到github之类的网站上,我们通过下载其代码,在本地执行maven install,可以把代码编译成jar包安装到本地仓库.而一个项目通常有 ...

  8. ExpressRoute 概述

    使用 Azure ExpressRoute 可通过连接服务提供商所提供的专用连接,将本地网络扩展到 Azure 云.使用 ExpressRoute 可与 Azure云服务建立连接. 可以从任意位置之间 ...

  9. java入门学习总结

    1.jdk(java开发工具包)------> jre(java运行环境)------> jvm(java虚拟机) ------>应用(javac) -------> java ...

  10. Java学习---XML的读写操作

    DOM4_Jwriter.java package com.ftl.xmlparse; import java.io.File; import java.io.FileNotFoundExceptio ...