LINUX线程简介和简单代码案例

0x00.什么是线程
    是计算机中独立运行的最小单位,运行时占用很少的系统资源。可以把线程看成是操作系统分配CPU时间的基本单元。一个进程可以拥有一个至多个线程。它线程在进程内部共享地址空间、打开的文件描述符等资源。同时线程也有其私有的数据信息,包括:线程号、寄存器(程序计数器和堆栈指针)、堆栈、信号掩码、优先级、线程私有存储空间

0x01.为什么使用线程
    在某个时间片需要同时执行两件或者两件以上的事情

0x02.怎么使用线程

  A. 使用到的函数

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

    int pthread_join(pthread_t thread, void **retval);

  B.代码案例

  测试环境:ubuntu 16.0

  编译器:       g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 (查看版本指令:g++ --version)

  编译注意事项: g++ thread.cpp -o thread -lpthread

 1     #include <stdio.h>
 2     #include <stdlib.h>
 3     #include <string.h>
 4     #include <error.h>
 5     #include <pthread.h>
 6
 7     //要执行的线程方法
 8     void* ThreadFunc(void* argc)
 9     {
10         printf("thread start \n");
11     }
12
13     int main(int argc,char* argv[])
14     {
15         pthread_t pid;
16         void* ret_val;
17
18         //创建子线程并绑定子线程执行方法
19         int create_status = pthread_craete(&pthread_t, NULL,
20                 ThreadFunc, NULL);
21         if(0 != create_status)
22         {
23             perror("main()->pthread_create");
24             exit(1);
25         }
26
27         //等待创建的子线程先执行
28         pthread_join(pid, &ret_val);
29
30         return 0;
31     }

0x03.遇到的坑

      先没有使用pthread_join(),执行./thread 没有任何信息。后来查资料了解到 pthread_create() 创建线程成功后,主线程(main())会继续执行。

      之后调用pthread_join()函数,会等待子线程执行完毕,再继续主线程。

  

时间: 2024-12-15 08:33:27

LINUX线程简介和简单代码案例的相关文章

Linux线程学习(二)

一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可以读或写声明过的全局变量.如果曾用fork() 编写过重要代码,就会认识到这个工具的重要性.为什么呢?虽然fork() 允许创建多个进程,但它还会带来以下通信问题:如何让多个进程相互通信,这里每个进程都有各自独立的内存空间.对这个问题没有一个简单的答案.虽然有许多不同种类的本地IPC (进程间通信)

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

spring_boot_pay支付宝,微信,银联支付详细代码案例

spring-boot-pay 支付服务:支付宝,微信,银联详细代码案例(除银联支付可以测试以外,支付宝和微信支付测试均需要企业认证,个人无法完成测试),项目启动前请仔细阅读 注意事项  . 友情提示 由于工作原因,项目正在完善中(仅供参考),随时更新日志,有疑问请留言或者加群 演示界面 欢迎关注 支付宝 电脑支付:https://docs.open.alipay.com/270 扫码支付:https://docs.open.alipay.com/194 手机支付:https://docs.op

“多线程”简介及其C代码实现框架

在一些计算机专业相关的书籍中,大家经常听说"多线程"这个概念.那么什么是"多线程"?什么时候使用"多线程"?在程序设计中使用"多线程"有什么好处呢?很多刚入职的程序员也对"多线程"感到非常的好奇,认为它很"高大上".本文对"多线程"进行了简单的介绍,并给出了其C代码的实现框架. "单线程"程序 要想理解"多线程",那么就要先从&

【Linux基础入门】1、Linux系统简介

1.1 Linux为何物? Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8,10)和 Mac OS .这里简单介绍一下操作系统在整个计算机系统中的角色.我们的应用体系主要由四层构成,分别为:硬件(最大层).内核.系统调用和应用程序,我们的 Linux 也就是系统调用和内核那两层.当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器.浏览器.电子邮件等. 1.2 Linux历史简介 操作系统始于二十世纪五十年代,当时的操作系统能运行批处理

Linux 线程(进程)数限制分析

1.问题来源 公司线上环境出现MQ不能接受消息的异常,运维和开发人员临时切换另一台服务器的MQ后恢复.同时运维人员反馈在出现问题的服务器上很多基本的命令都不能运行,出现如下错误: 2.   初步原因分析和解决 让运维的兄弟在服务上查看内存.CPU.网络.IO等基本信息都正常.于是自己到运维的服务器上看了一下,下面是slabtop –s c的运行结果,问题初步原因貌似出现了: 如果看到这个截图你看不出什么异常的话,下面的内容你可能不感兴趣,哈哈... task_struct是内核对进程的管理单位,

linux线程的实现

http://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情.这在处理异步事件如异步IO时特别有用.内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间.支持多线程的内核叫做多线程内核(Multi-Threads kernel ). 轻量级进程 轻量级线程(LWP)是一种由内核支持的用户线程.它是基于内核线程的高级

Linux线程编程之信号处理

前言 Linux多线程环境中的信号处理不同于进程的信号处理.一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理. 本文首先介绍信号处理在进程中和线程间的不同,然后描述相应的线程库函数,在此基础上给出一组示例代码,以讨论线程编程中信号处理的细节和注意事项.文中涉及的代码运行环境如下: 本文通过sigwait()调用来“等待”信号,而通过signal()/sigaction()注册的信号处理函数来“捕获”信号,以体现其同步和异步的区别. 一  概念