• C语言的线程库
  • pthread.h的API
  • pthread.h的示例

C语言的线程库

  • 在Linux系统上,可使用pthread.h的API创建线程。比如pthread_create()。

    • pthread.h符合POSIX标准,适用于类Unix、Linux系统。也有兼容Windows的版本——pthreads-w32。
    • 编译时要链接pthread库,比如:gcc test.c -o test -l pthread
  • C11制定了一个标准的线程库threads.h,但部分编译器不支持它。

pthread.h的API

官方API列表:https://www.sourceware.org/pthreads-win32/manual/index.html
这里列出几个常用API:

pthread_t    // 一种数据类型,用于存储线程IDint pthread_create(pthread_t *id,              // 传入一个pthread_t类型的变量的地址const pthread_attr_t * attr,    // 传入线程的属性(传入NULL则是默认属性)void *(*) (void *),           // 传入要运行的函数名void *arg);                 // 传入要运行的函数的参数(没有参数则填NULL,有多个则封装成一个结构体)功能:创建一个线程来运行一个函数。线程创建成功后会将该线程的ID存储到变量id中,并返回0。线程创建失败时会返回非零值。要运行的函数应该定义成 void *fun(void *arg) 的格式。int pthread_join(pthread_t id, void **retval);功能:暂停当前线程的运行,等待id所指的线程终止。当它终止之后,其返回值会存储在retval变量中。int pthread_cancel(pthread_t id);功能:向某个线程发送取消请求,请它结束运行。目标线程可能立即终止,也可能稍后终止,也可能忽略取消请求。

pthread.h的示例

这里创建两个线程,分别运行两个函数:

#include <stdio.h>
#include <pthread.h>void *fun1(){     // 没有参数puts("fun1() end.");   // 显示一些信息,便于判断多个线程的结束顺序return 0;
}typedef struct{int age;char name[10];
} Horse;void *fun2(void *p){    // 用一个结构体传入参数Horse h = *(Horse *)p;printf("age: %d, name: %s.\n", h.age, h.name);puts("fun2() end.");return 0;
}int main(){int rc;pthread_t id;// 创建第一个线程rc = pthread_create(&id, NULL, fun1, NULL);if (rc)puts("Failed to create the thread fun1().");// 创建第二个线程Horse horse = {5, "Jack"};rc = pthread_create(&id, NULL, fun2, &horse);if (rc)puts("Failed to create the thread fun2().");// 阻塞主线程的运行,以免主线程运行结束时提前终止子线程pthread_join(id, NULL);puts("main() end.");return 0;
}

编译运行:

C语言用pthread.h创建线程相关推荐

  1. C语言多线程教程(pthread)(线程创建pthread_t,指定线程run方法pthread_create,加mutex锁,解锁,伪共享 false sharing【假共享】)

    [C语言]多线程程序入门教程 文章目录 查看pthread_create()函数文档 · Demo1 单线程(创建线程pthread_t .创建线程run方法pthread_create) · Dem ...

  2. C 语言编程 — pthread 用户线程操作

    目录 文章目录 目录 pthread 线程库 TCB 结构体 线程的生命周期管理 线程的合并与分离 pthread_create() 创建线程 pthread_join() 合并线程 pthread_ ...

  3. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  4. Pthread创建线程后必须使用join或detach释放线程资源

    这两天在看Pthread 资料的时候,无意中看到这样一句话(man pthread_detach): Either pthread_join(3) or pthread_detach() should ...

  5. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  6. c语言线程的创建步骤,C语言创建线程thread_create()的方法

    在头文件 threads.h 中,定义和声明了支持多线程的宏.类型和函数.所有直接与线程相关的标识符,均以前缀 thrd_ 作为开头.例如,thrd_t 是一个对象类型,它标识了一个线程. 函数 th ...

  7. pthread 立即停止线程_pthread线程的终止退出 | 线程的大量创建

    1. 线程只是从启动例程中返回,返回值是线程的退出码: 2. 线程调用了pthread_exit函数: 3. 线程可以被同一进程中的其他线程取消. ************************** ...

  8. c语言 threads.h 创建简单的通用多线程模块实例

    对多线程编程的需求不多,因而在这方面的实例和教程很少.对于编程大牛来说,这也不是一个很深奥的实例.这里做一个简单实用的实例,它使用了 C11 标准头 threads.h ,适用于新的多线程标准. th ...

  9. c语言 线程读写,C语言创建线程以及使用锁进行读写分离

    线程的使用 1.线程的创建 线程的相关操作放在中. 1.1我们定义一个线程,首先要进行定义一个函数,类似我们创建一个a线程 void *thread_a(void *in){ printf(" ...

最新文章

  1. YOLO、SSD、FPN、Mask-RCNN检测模型对比
  2. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
  3. 简单struts,spring,mybatis组合使用
  4. Ruby中如何识别13位的时间戳
  5. 游戏开发中的数据表示
  6. 新网域名服务故障的N种可能
  7. 谈工作没兴趣,空谈都有兴趣
  8. atitit...触发器机制 ltrigger mechanism sumup .的总结O8f
  9. Delphi7 动态数组
  10. 微信小程序 设置微软雅黑字体
  11. Linux编程基础之Makefile的使用
  12. win10系统无工具一键升级与重装
  13. 代码质量有哪些评判标准?
  14. 浅谈面试经验(面试官角度)
  15. 【Linux】查看网络接口(ifconfig | nmcli)
  16. 【Docker】fuse: device not found, try ‘modprobe fuse‘ first
  17. [C语言]c语言之strcmp
  18. 河南理工大学篮球计算机,河南理工大学
  19. hihoCoder #1558 : H国的身份证号码I
  20. Linux常用指令(命令)超级无敌全合集加图文说明

热门文章

  1. mysql22007_mysql – SQLSTATE [22007]:无效的日期时间格式:1292日期时间值不正确:’2008-03-30 02:56:12′...
  2. 51单片机学习笔记-12LCD1602液晶屏
  3. TCP/IP协议栈在Linux内核中的运行时序分析【万字长文】
  4. python(3): str list dict tuple set 常用函数整理
  5. 电脑鸿蒙系统怎么连接无线网,电脑新装了系统,连接不上WiFi,怎么处理?
  6. File中list方法listFiles方法
  7. Scrcpy v1.9可以在屏幕关闭的情况下镜像屏幕
  8. java suprious wakeup_多线程编程中条件变量和的spurious wakeup 虚假唤醒
  9. python面试题百度云下载_【百度Python面试题及回答技巧有哪些?】-看准网
  10. 服装分床省料软件的成功研发