zoukankan      html  css  js  c++  java
  • 线程数据共享

    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


  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/11965065.html
Copyright © 2011-2022 走看看