当前位置: 首页 > article >正文

pthread_create概念和使用案例

pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在 C 或 C++ 程序中创建新的线程。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

概念:

pthread_create 的函数原型如下:

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

参数说明:

  • thread:指向 pthread_t 类型的指针,用于存储新创建线程的标识符。
  • attr:设置新线程的属性,如线程栈大小、调度策略等。如果为 NULL,则使用默认属性。
  • start_routine:线程函数的起始地址,即线程创建后要执行的函数。
  • arg:传递给线程函数的参数。
    返回值:
  • 成功:返回 0。
  • 失败:返回错误编号。

使用案例:

以下是一个简单的使用 pthread_create 创建线程的例子:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
// 线程函数
void *thread_function(void *arg) {
    char *message = (char *)arg;
    printf("Thread says: %s\n", message);
    return NULL;
}
int main() {
    pthread_t my_thread;
    char *message = "Hello from the new thread!";
    // 创建线程
    if (pthread_create(&my_thread, NULL, thread_function, (void *)message) != 0) {
        perror("Thread creation failed");
        return 1;
    }
    // 等待线程结束
    pthread_join(my_thread, NULL);
    printf("Thread finished execution\n");
    return 0;
}

在这个例子中:

  1. 定义了一个线程函数 thread_function,它接收一个字符串参数并打印它。
  2. main 函数中,使用 pthread_create 创建了一个新线程,并传递了 thread_function 作为线程函数和要打印的消息作为参数。
  3. 使用 pthread_join 等待新创建的线程结束。
    编译时需要链接 pthread 库:
gcc -o thread_example thread_example.c -lpthread

运行程序,输出可能如下:

Thread says: Hello from the new thread!
Thread finished execution

注意事项:

  • 线程创建后,主线程和新线程将并发执行,执行顺序不确定。
  • 在多线程程序中,确保正确地管理线程的创建和销毁,避免资源泄漏。
  • 使用线程时,要注意线程安全问题,避免竞态条件和死锁。

http://www.kler.cn/a/456342.html

相关文章:

  • TOGAF之架构标准规范-业务架构
  • Django多字段认证的实现
  • 一文大白话讲清楚javascript浮点数精度丢失和解决策略
  • 【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化
  • SQL 实战:动态表创建与多表更新的高级 SQL
  • FFmpeg 的常用API
  • DeepSeek-V2:强大、经济且高效的专家混合语言模型
  • AIDD - 人工智能药物设计 -使用 Butina 模块对相似化合物进行聚类
  • vue2前端导出pdf文件
  • stm32基础(keil创建、Proteus仿真、点亮LED灯,7段数码管)
  • AI + 爬虫:智能化数据采集的未来
  • 转义特殊token is all you need
  • 已有docker镜像构建过程分析
  • Redis:高性能内存数据库的深度探索
  • 第三百四十六节 JavaFX教程 - JavaFX绑定
  • 解释为什么fetch(JavaScript)无法将读取的数据存入外部变量
  • JVM简介—JVM的执行子系统
  • 企业架构学习笔记-数字化转型
  • 华为管理变革之道:奋斗文化与活力
  • 软路由系统 iStoreOS 中部署 Minecraft 服务器
  • Redis+注解实现限流机制(IP、自定义等)
  • SqlSugar配置连接达梦数据库集群
  • C#WPF基础介绍/第一个WPF程序
  • 【RabbitMQ的死信队列】
  • CCF-GESP 等级考试 2023年12月认证C++二级真题解析
  • firefly rk3588s+qt+海康摄像头部分问题记录