• 线程数据共享


    gao

    线程数据共享

    pthread_getpecific和pthread_setspecific提供了在同一个线程中不同函数间共享数据即线程存储的一种方法。具体用法为:
    1.调用pthread_key_create()来创建一个类型为pthread_key_t类型的变量

    该函数有两个参数,第一个参数就是声明的pthread_key_t变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可以设成NULL,这样系统将调用默认的清理函数。

    2.调用pthread_setspcific()

    当线程中需要存储特殊值的时候调用该函数,该函数有两个参数,第一个为前面声明的pthread_key_t变量,第二个为void*变量,用来存储任何类型的值。

    3.如果需要取出所存储的值,调用pthread_getspecific()

    该函数的参数为前面提到的pthread_key_t变量,该函数返回void*类型的值。


    #include<stdio.h>
    #include<pthread.h>
    #include<string.h>
    pthread_key_t p_key;
     
    void func1()
    {
            int *tmp = (int*)pthread_getspecific(p_key);//同一线程内的各个函数间共享数据。
            printf("%d is runing in %s
    ",*tmp,__func__);
     
    }
    void *thread_func(void *args)
    {
     
            pthread_setspecific(p_key,args);
     
            int *tmp = (int*)pthread_getspecific(p_key);//获得线程的私有空间
            printf("%d is runing in %s
    ",*tmp,__func__);
     
            *tmp = (*tmp)*100;//修改私有变量的值
     
            func1();
     
            return (void*)0;
    }
    int main()
    {
            pthread_t pa, pb;
            int a=1;
            int b=2;
            pthread_key_create(&p_key,NULL);
            pthread_create(&pa, NULL,thread_func,&a);
            pthread_create(&pb, NULL,thread_func,&b);
            pthread_join(pa, NULL);
            pthread_join(pb, NULL);
            return 0;
    }

    作者:EamonXia


  • 相关阅读:
    ElasticSearch(7.13.1) 作为服务启动(Windows)
    ElasticSearch(7.13.1) 安装与命令行启动
    Spring Boot 监听器 通过Session监听在线人数
    layui 弹出层icon
    Spring Boot 定时器 系统时间测试
    Spring Boot 拦截器
    Tomcat部署
    SpringBoot学习之整合Swagger
    浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
    SpringBoot学习之整合Druid的简单应用
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/11965065.html
Copyright © 2020-2023  润新知