pthread_create用法
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void),
void *restrict arg);
Returns: 0 if OK, error number on failure
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
ps:
编译的时候,一定要加上-lpthread选项,不然会报错:undefined reference to `pthread_create'。
下面来看看pthread_create的声明:
#include<pthread.h>
int pthread_create(pthread_t *thread, pthread_addr_t *arr,
void* (*start_routine)(void *), void *arg);
- thread :用于返回创建的线程的ID
- arr : 用于指定的被创建的线程的属性,上面的函数中使用NULL,表示使用默认的属性
- start_routine : 这是一个函数指针,指向线程被创建后要调用的函数
- arg : 用于给线程传递参数,在本例中没有传递参数,所以使用了NULL
简单的线程程序
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define NUM_THREADS 8
void
*PrintHello(
void
*args)
{
int
thread_arg;
sleep(1);
thread_arg = (
int
)args;
printf
(
"Hello from thread %d\n"
, thread_arg);
return
NULL;
}
int
main(
void
)
{
int
rc,t;
pthread_t
thread
[NUM_THREADS];
for
( t = 0; t < NUM_THREADS; t++)
{
printf
(
"Creating thread %d\n"
, t);
rc = pthread_create(&
thread
[t], NULL, PrintHello, (
void
*)t);
if
(rc)
{
printf
(
"ERROR; return code is %d\n"
, rc);
return
EXIT_FAILURE;
}
}
for
( t = 0; t < NUM_THREADS; t++)
pthread_join(
thread
[t], NULL);
return
EXIT_SUCCESS;
}
大悲无泪--大悟无言--大笑无声
分类:
C语言学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题