• 线程数据共享


    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


  • 相关阅读:
    eclipse新建maven web项目
    mongodb启用Profiling定位问题
    Linux下系统监控工具nmon使用
    MMS(mongodb监控工具)
    Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
    mongodb sharding集群搭建
    linux 下mongodb 3.2.5单机版安装
    linux mongodb replica set集群安装
    DOS命令查询当前文件夹中文件数量
    centos7 开放mongodb端口
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/11965065.html
Copyright © 2020-2023  润新知