zoukankan      html  css  js  c++  java
  • __thread 和 __typeof__关键字


    http://blog.csdn.net/jfkidear/article/details/7990540


    __thread:在多线程变成中,使用于global变量,使每个线程都私有一份。
    static __thread int count;
    void *function1(void *argc)
    {
    printf("porgran pid:%u, the function1 pthread id is %lu, count:%d ",getpid(), pthread_self(), count);
    count = 10;
    printf("porgran pid:%u, last the function1 pthread id is %lu, count:%d ",getpid(), pthread_self(), count);

    return 0;
    }
    void *function2(void *argc)
    {
    printf("porgran pid:%u, the function2 pthread id is %lu, count:%d ", getpid(), pthread_self(), count);
    sleep(2);
    count = 100;
    printf("porgran pid:%u, last the function2 pthread id is %lu, count:%d ", getpid(), pthread_self(), count);

    return 0;
    }

    int main()
    {
    pthread_t  thread_id[2];
    int ret;
    pthread_t mian_thread_id;
    mian_thread_id = pthread_self();
    count = 2;
    printf("porgran pid:%u, mian_thread_id:%lu, count:%d ", getpid(), mian_thread_id, count);

    ret = pthread_create(thread_id, NULL, function1, NULL);
    assert(ret == 0);

    ret = pthread_create(thread_id + 1, NULL, function2, NULL);
    assert(ret == 0);

    ret = pthread_join(thread_id[0], NULL);
    assert(ret == 0);
    ret = pthread_join(thread_id[1], NULL);
    assert(ret == 0);

    count = 1000;
    printf("porgran pid:%u, last mian_thread_id:%lu, count:%d ", getpid(), mian_thread_id, count);
    return 0;
    }

    __typeof__(var) 是gcc对C语言的一个扩展保留字,用于声明变量类型,var可以是数据类型(int, char*..),也可以是变量表达式。

    define DEFINE_MY_TYPE(type, name) __thread __typeof__(type) my_var_##name

    DEFINE_MY_TYPE(int, one); //It   is   equivalent   to  '__thread int  my_var_'; which is a thread variable.
    int main()
    {
    __typeof__(int *) x; //It   is   equivalent   to  'int  *x';

    __typeof__(int) a;//It   is   equivalent   to  'int  a';

    __typeof__(*x)  y;//It   is   equivalent   to  'int y';

    __typeof__(&a) b;//It   is   equivalent   to  'int  b';

    __typeof__(__typeof__(int *)[4])   z; //It   is   equivalent   to  'int  *z[4]';
    y = *x;
    b = &a;
    z[0] = x;
    z[1] = &a;
    return 0;
    }

  • 相关阅读:
    4.2 手指绘图
    Linux-linux常用操作
    gdb的使用
    时钟的函数
    动态链接库
    简单算法整理
    win的使用
    c语言格式化打印
    Symfony2 学习笔记之控制器
    Symfony2 学习笔记之系统路由
  • 原文地址:https://www.cnblogs.com/ztguang/p/12645056.html
Copyright © 2011-2022 走看看