__thread 和 __typeof__关键字

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

return 0;
}
void *function2(void *argc)
{
printf("porgran pid:%u, the function2 pthread id is %lu, count:%d\n", getpid(), pthread_self(), count);
sleep(2);
count = 100;
printf("porgran pid:%u, last the function2 pthread id is %lu, count:%d\n", 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\n", 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\n", 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RSA openssl_public_encrypt false

这个问题困扰了我好久,最后发现,原来这个函数只能最大长度为117个字节。如果加密的串超过这个长度,就会返回false。转载于:https://www.cnblogs.com/gpfeisoft/p/3533479.html

linux将文件下载到本地windows,XSHELL下直接下载文件到本地(Windows)

xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz首先你的Ubuntu需要安装rz.sz(如果没有安装请执行以下命令,安装完的请跳过.其它版本linux请自行安装相应软件)yum install lrzsz安装完毕即可使用rz,sz是便是Linux/Uni…

C++11 标准新特性: 右值引用与转移语义

原文地址 http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ C 的新标准 C11 已经发布一段时间了。本文介绍了新标准中的一个特性,右值引用和转移语义。这个特性能够使代码更加简洁高效。 新特性的目的 右值引用 (Rvalue Referene) 是 C 新标准 (…

android远程linux命令,测试可用的Android远程语音识别实例

测试可用的Android远程语音识别实例:代码下载在:相关文件下载在Linux公社的1号FTP服务器里,下载地址:用户名:www.linuxidc.com密码:www.muu.cc在 2011年LinuxIDC.com\10月\10月\测试可用的Android远程语音识别实例pack…

C++11 标准新特性: 右值引用与转移语义(点评)

<<C11 标准新特性: 右值引用与转移语义>> 原文地址如下 http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 对MyString那个例子来说。 我写了三个测试用例。 1. MyString a; a MyString("Hello"); …

[原创]传递UIScrollView的滑动事件到其子视图中

在开发项目时&#xff0c;遇到了一个问题&#xff1a; 我的UIScrollViewOut中嵌入了一个UIScrollViewIn, 当我想要拖动UIScrollViewIn时,UIScrollViewOut却动了&#xff0c;而UIScrollViewIn没有动。但是只要按住UIScrollViewIn一会再拖动&#xff0c;UIScrollViewIn就可以滑动…

linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)

第一次写读书笔记&#xff0c;有什么套路呢&#xff1f;还没来得及去学习。《linux kernel的设计与实现》真的是一本好书&#xff0c;里面的东西解答了很多工作中的疑问。如显示地调用schedule()进行调度&#xff0c;系统调用__syscalln()&#xff0c;一些数据结构函数经常在ke…

C++中正确使用PRId64

nt64_t用来表示64位整数&#xff0c;在32位系统中是long long int&#xff0c;在64位系统中是long int&#xff0c;所以打印int64_t的格式化方法是&#xff1a; [cpp] view plaincopy printf("%ld", value); // 64bit OS printf("%lld", value); // 32bi…

大话细说ORM -----(转)

什么是ORM&#xff1f; ORM&#xff0c;即对象关系映射(Object Relational Mapping)表示一种技术&#xff0c;用来把&#xff08;对象模型&#xff09;表示的对象映射到基于SQL的&#xff08;关系模型&#xff09;数据结构中去。 说得通俗点&#xff0c;就是在对象的属性与关系…

linux中权限的名词解释,Linux的基本权限和特殊权限

基本权限的类别访问方式(权限)&#xff1a;-读写&#xff1a;允许查看内容-read r-写入&#xff1a;允许修改内容-write w-可执行&#xff1a;允许运行和切换-execute x对于文本文件&#xff1a;r&#xff1a;cat head tail lessw&#xff1a;vimx&#xff1a…

乱写

想写点东西&#xff0c;又不知道从何下笔。可是心情又觉得有些许不爽&#xff0c;那就漫无思绪想到哪写哪吧。 昨天加了一个HR的QQ&#xff0c;发了一封简历过去&#xff0c;她说她打开我的简历电脑就蓝屏了&#xff08;无语&#xff09;&#xff0c;这管不着我简历的事吧。然后…

容器set和multiset

一、set和multiset基础 set和multiset会根据特定的排序准则&#xff0c;自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件&#xff1a; #include <set> set和multiset都是定义在std空间里的类模板&#xff1a; [cpp] view plaincopyprint? t…

linux centos命令语法,linux-centos7

# :-: linux常用的相关查询命令### **1.查看linux用户命令**cat /etc/passwd### **2.查看cpu,mem**grep "model name" /proc/cpuinfo 查看cpu核数cat /proc/cpuinfo 查看cpu详细信息grep MemTotal /proc/meminfo 查看内存总大小以及剩余大小…

oracle rac理解和用途扩展

Oracle RAC的优势在于利用多个节点&#xff08;数据库实例&#xff09;组成一个数据库&#xff0c;这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能&#xff0c;而且可以通过增加节点进行性能的扩展。实现Oracle RAC需要解决的关键问题就是多节点进行数据访问…

std::set作为一个有序集合

摘要&#xff1a;std::set作为标准库的一个关联容器&#xff0c;实现内部元素进行了排序&#xff0c;使用这特性可以对一组元素进行插入排序。std::set最初的设计是完成数学中“集合”的概念&#xff0c;它提供的接口也是如此。本文简单地介绍一下这一个标准库容器。 为了使用s…

linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息。通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到&#xff0c;如果是主动与别的机器建立的连接信息则可以通过 lsof 命令来获得。例如我想要查看进程 frps 当前的所有连接信息&#xff0c…

SQLite多线程使用总结

SQLite支持3种线程模式&#xff1a;单线程&#xff1a;这种模式下&#xff0c;没有进行互斥&#xff0c;多线程使用不安全。禁用所有的mutex锁&#xff0c;并发使用时会出错。当SQLite编译时加了SQLITE_THREADSAFE0参数&#xff0c;或者在初始化SQLite前调用sqlite3_config(SQL…

linux rom打包工具,Android rom解包打包工具

eMMC主要是针对手机和平板电脑等产品的内嵌式存储器&#xff0c;由于其在封装中集成了一个控制器&#xff0c;且提供标准接口并管理闪存等优势&#xff0c;越来越受到Android手机厂商的青睐&#xff0c;以eMMC为存储设备的android手机&#xff0c;其文件系统(system、data分区)…

winform(C#)透明方法

1.设置窗体opacity属性&#xff1a; 2.窗体的BackColor和TransparencyKey属性设置相同的值&#xff1a; 2.加using System.Runtime.InteropServices;引用然后加上以下代码&#xff1a; [StructLayout(LayoutKind.Sequential)]public struct MARGINS{public int Left;public int…

ssh免密码登陆

1. 先去掉root登陆密码 passwd -d root 或者修改/etc/shadow 文件&#xff0c;将root那行&#xff0c;前两个冒号之间的加密过的密码去掉 2. 修改sshd_config文件 PermitEmptyPasswords yes