首页 > 其他分享 >线程参数传递 同一个结构体指针,并且要传递id(0-xx)的方法

线程参数传递 同一个结构体指针,并且要传递id(0-xx)的方法

时间:2024-07-29 20:56:10浏览次数:14  
标签:arg st xx 线程 rc my id

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

线程参数传递 同一个结构体指针,并且要传递id(0-xx)的方法
在创建线程时候可能会遇到不仅要传递 全局唯一的结构体指针给线程,还需要传递创建线程的id(0-xx)给线程,线程的arg只能传递一个参数,

可以再构建结构体,然后malloc然后在线程中使用完成后free


提示:以下是本篇文章正文内容,下面案例可供参考

一、代码示例?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>


typedef struct {
    long id;
    char name[16];
}  my_st;


// 线程函数
void* thread_function(void* arg) {
    long Id = ((my_st *)arg)->id;
    char c = ((my_st *)arg)->name[0];
    printf("Hello from id = %ld, c = %c\n", Id, c);
    free(arg); //线程内部使用完成后free
    pthread_exit(NULL);
}

int main() {
    // 定义线程 ID 数组
    pthread_t threads[10];
    int rc;
    char c = 'c';

    // 创建 10 个线程
    for (long i = 0; i < 10; i++) {
        //rc = pthread_create(&threads[i], NULL, thread_function, (void *)i); // 传递值 直接正常
        my_st* p_st = malloc(sizeof(my_st)); // 外部构建结构体malloc
        p_st->id = i;
        memset(p_st->name, c + (char)i, 1);
        rc = pthread_create(&threads[i], NULL, thread_function, p_st);// 传递指针 确保指针指向的数据不会被修改
        if (rc) {
            printf("Error: unable to create thread, error code = %d\n", rc);
            exit(-1);
        }
    }

    // 等待所有线程完成
    for (long i = 0; i < 10; i++) {
        rc = pthread_join(threads[i], NULL);
        if (rc) {
            printf("Error: unable to join, error code = %d\n", rc);
            exit(-1);
        }
    }

    printf("Main: program exiting.\n");
    return 0;
}

总结

线程参数传递 同一个结构体指针,并且要传递id(0-xx)的方法。
可以再构建结构体,然后创建线程时malloc,然后在线程处理函数中使用完成后free

标签:arg,st,xx,线程,rc,my,id
From: https://blog.csdn.net/qq_37077309/article/details/140720657

相关文章

  • Android 8.0 源码分析 (四) Activity 启动
    链接:https://juejin.cn/post/6844903983442558989前言我们熟知一般Android工程师都是在应用层上���发,不会涉及系统源码,但是如果你想往底层发展,或者深入插件化、Framework系统层等开发工作,如果不了解Android源码可是不行的,那么接下来我基于自己的理解跟学习来记录跟Android......
  • Android 8.0 源码分析 (二) Launcher 启动
    链接https://juejin.cn/post/6844903981504790541前言我们熟知一般Android工程师都是在应用层上开发,不会涉及系统源码,但是如果你想往底层发展,或者深入插件化、Framework系统层等开发工作,如果不了解Android源码可是不行的,那么接下来我基于自己的理解跟学习来记录跟Androi......
  • 记录一次IPhone和Android手机usb网卡驱动的移植过程
    记录一次IPhone和Android手机USB网卡的移植过程移植环境IPhoneUSB网卡的快速移植1.**添加驱动支持**2.USB连接IPhone手机,留意手机的`信任弹窗`并点击确定和输入密码3.检查USB网卡是否生成4.如果生成的网卡没有自动分配IP,安装udhcpc5.验证测试AndroidUSB网卡的快......
  • java多线程(超详细!)
    Java的多线程是一种允许在一个程序中同时运行多个线程的技术。每个线程是独立的执行路径,可以并发执行,从而提高程序的效率和响应能力。1.线程基础Java中的线程可以通过继承Thread类或实现Runnable接口来创建和管理。1.1继承Thread类classMyThreadextendsThr......
  • java多线程(超详细!)
    Java的多线程是一种允许在一个程序中同时运行多个线程的技术。每个线程是独立的执行路径,可以并发执行,从而提高程序的效率和响应能力。1.线程基础Java中的线程可以通过继承Thread类或实现Runnable接口来创建和管理。1.1继承Thread类classMyThreadextendsThread{......
  • c# 多线程环境下控制对共享资源访问的办法
    Monitor:定义:Monitor 是C#中最基本的同步机制,通过 Enter 和 Exit 方法来控制对共享资源的访问。它提供了排他锁的功能,确保在任何时刻只有一个线程可以访问共享资源。优点:简单易用,适合对临界区进行粗粒度的同步控制。缺点:只能实现排它锁,不能实现读写锁,性能相对较低。......
  • 在工作线程中找到基于 Celery 类的任务,但在使用时得到 NotRegistered
    我像那样配置CeleryfromceleryimportCeleryfromsettings.configimportsettingscelery_app=Celery(broker=settings.RABBITMQ_URL,backend="rpc://",)celery_app.config_from_object(settings.CELERY_SETTINGS_MODULE)celery_app.autodiscov......
  • Android 10.0 Launcher 启动流程
    在前面SystemUI启动流程中说到,在SystemServer中会去启动各种系统服务,这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前,系统四大组件的启动都是在ActivityManagerService中,在android10中,单独抽出了一个ActivityTaskManagerService,主要......
  • 基于Android平台开发,仿头条新闻app新闻分类分类列表实现(四)
    1.项目涉及到的技术点列表控件RecyclerView的使用调用API获取网络数据Glide加载图片Handler的使用okhttp的使用2.代码实现过程在上集中,已经使用TabLayout+ViewPager2把新闻分类滑动实现了,这集具体实现新闻列表新闻布局fragment_tab_news.xml<?xmlversion="1.0"en......
  • tidb集群部署
    ####################################################集群IP例子172.21.243.141172.21.243.69172.21.243.47172.21.243.33172.21.243.184172.21.243.64172.21.243.223机器配置我这边是7台机器,每台2c8g100g####################################################离线部署方......