C语言用pthread.h创建线程
- 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创建线程相关推荐
- C语言多线程教程(pthread)(线程创建pthread_t,指定线程run方法pthread_create,加mutex锁,解锁,伪共享 false sharing【假共享】)
[C语言]多线程程序入门教程 文章目录 查看pthread_create()函数文档 · Demo1 单线程(创建线程pthread_t .创建线程run方法pthread_create) · Dem ...
- C 语言编程 — pthread 用户线程操作
目录 文章目录 目录 pthread 线程库 TCB 结构体 线程的生命周期管理 线程的合并与分离 pthread_create() 创建线程 pthread_join() 合并线程 pthread_ ...
- clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- Pthread创建线程后必须使用join或detach释放线程资源
这两天在看Pthread 资料的时候,无意中看到这样一句话(man pthread_detach): Either pthread_join(3) or pthread_detach() should ...
- clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- c语言线程的创建步骤,C语言创建线程thread_create()的方法
在头文件 threads.h 中,定义和声明了支持多线程的宏.类型和函数.所有直接与线程相关的标识符,均以前缀 thrd_ 作为开头.例如,thrd_t 是一个对象类型,它标识了一个线程. 函数 th ...
- pthread 立即停止线程_pthread线程的终止退出 | 线程的大量创建
1. 线程只是从启动例程中返回,返回值是线程的退出码: 2. 线程调用了pthread_exit函数: 3. 线程可以被同一进程中的其他线程取消. ************************** ...
- c语言 threads.h 创建简单的通用多线程模块实例
对多线程编程的需求不多,因而在这方面的实例和教程很少.对于编程大牛来说,这也不是一个很深奥的实例.这里做一个简单实用的实例,它使用了 C11 标准头 threads.h ,适用于新的多线程标准. th ...
- c语言 线程读写,C语言创建线程以及使用锁进行读写分离
线程的使用 1.线程的创建 线程的相关操作放在中. 1.1我们定义一个线程,首先要进行定义一个函数,类似我们创建一个a线程 void *thread_a(void *in){ printf(" ...
最新文章
- YOLO、SSD、FPN、Mask-RCNN检测模型对比
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
- 简单struts,spring,mybatis组合使用
- Ruby中如何识别13位的时间戳
- 游戏开发中的数据表示
- 新网域名服务故障的N种可能
- 谈工作没兴趣,空谈都有兴趣
- atitit...触发器机制 ltrigger mechanism sumup .的总结O8f
- Delphi7 动态数组
- 微信小程序 设置微软雅黑字体
- Linux编程基础之Makefile的使用
- win10系统无工具一键升级与重装
- 代码质量有哪些评判标准?
- 浅谈面试经验(面试官角度)
- 【Linux】查看网络接口(ifconfig | nmcli)
- 【Docker】fuse: device not found, try ‘modprobe fuse‘ first
- [C语言]c语言之strcmp
- 河南理工大学篮球计算机,河南理工大学
- hihoCoder #1558 : H国的身份证号码I
- Linux常用指令(命令)超级无敌全合集加图文说明
热门文章
- mysql22007_mysql – SQLSTATE [22007]:无效的日期时间格式:1292日期时间值不正确:’2008-03-30 02:56:12′...
- 51单片机学习笔记-12LCD1602液晶屏
- TCP/IP协议栈在Linux内核中的运行时序分析【万字长文】
- python(3): str list dict tuple set 常用函数整理
- 电脑鸿蒙系统怎么连接无线网,电脑新装了系统,连接不上WiFi,怎么处理?
- File中list方法listFiles方法
- Scrcpy v1.9可以在屏幕关闭的情况下镜像屏幕
- java suprious wakeup_多线程编程中条件变量和的spurious wakeup 虚假唤醒
- python面试题百度云下载_【百度Python面试题及回答技巧有哪些?】-看准网
- 服装分床省料软件的成功研发