博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux C多线程编程
阅读量:6466 次
发布时间:2019-06-23

本文共 1267 字,大约阅读时间需要 4 分钟。

创建一个线程

  关于线程的头文件

#include 

 

  pthread_t用来声明线程ID

typedef unsigned long int pthread_t;

  所有包含这个头文件里边的函数,在编译和链接的时候都要加上一个参数

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

  这个函数会在调用进程中起一个新的线程,新的线程通过调用start_routine这个函数开始执行,arg为start_routine函数的参数(如果没有,则默认为NULL),新启动的线程会以以下几种方式结束

  • 它调用了pthread_exit(3), 对于同一个进程中的另外一个线程调用了pthread_join(3)指定了一个结束状态值.
  • start_routine执行完毕
  • 这个线程被取消执行(pthread_cancel(3))
  • main函数执行完毕

  attr指向一个pthread_attr_t结构体, 这个结构体包含了需要创建线程的各种属性, 如果attr是NULL的话,新的进程就会以默认属性创建.在这个函数返回之前,一个成功调用pthread_create()的线程ID会存储在thread中,这个ID标识了所创建的线程

 

 

pthread_t pthread_self(void);

  这个函数返回调用线程的ID.这个值与pthread_create()中创建的线程的ID相同(thread), 这个函数总会执行成功的.

 

 

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

  pthread_join这个函数会等待直到thread所指定的线程执行完毕. 如果thread已经执行完毕,这个函数会立即返回.但是,thread所指定的线程必须是joinable,什么是joinable呢?

一个线程是可连接的,当且仅当它描述了一个可执行的线程

一个线程是不可连接的,当他符合以下任意一种情况

  • if it was default-constructed.
  • if it has been moved from (either constructing another thread object, or assigning to it).
  • if either of its members join or detach has been called.

   代码中如果没有pthread_join, 主线程会很快结束从而使整个进程结束,创建的线程就没有机会开始执行就结束了. 加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束, 使创建的线程有机会执行.

转载于:https://www.cnblogs.com/spxcds/p/5448318.html

你可能感兴趣的文章
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
转载:《TypeScript 中文入门教程》 16、Symbols
查看>>
C#技术------垃圾回收机制(GC)
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
Linux系统编程——进程调度浅析
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
PXE部署实例
查看>>