多线程/多进程与并发
origin_lee
这个作者很懒,什么都没留下…
展开
-
多线程编程--- __thread关键字
__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。 __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内转载 2014-12-20 12:00:50 · 423 阅读 · 0 评论 -
线程局部变量与 __thread
线程局部变量与 __thread–五竹,2012/09/03现在使用多线程开发越来越普遍, 为了提高性能,性能局部变量使用也非常普遍.如线程私有的成员变量,buffer等.本文首先介绍线程局部变量的2 种使用方法:1). 常规的使用方式: 相对复杂2). __thread 修饰符: 使用简单,但容易不正确使用最后介绍封装的线程局变量操作接口,来解决上述两种使用方法的转载 2014-12-20 12:03:10 · 750 阅读 · 0 评论 -
Mutex和内存可见性
原文链接 作者:Loïc 译者:林永听介绍POSIX线程遵守共享内存模型[1],此模型各线程可以访问一组共享对象。多个并发的线程需要协同访问共享对象。为此该模型引入了以下两个属性来简化程序设计:原子访问:避免线程在访问数据对象时,另一线程正在修改它。内存可见性:一旦线程修改数据对象,其它线程在修改行为发生之后马上能看见此对象的新状态,如图1所示。Mutex通转载 2015-02-01 14:56:12 · 463 阅读 · 0 评论 -
内存关卡/栅栏 ( Memory Barriers / Fences ) – 译
翻译自:Martin Thompson – Memory Barriers/Fences在这篇文章里,我将讨论并发编程里最基础的技术–以内存关卡或栅栏著称,那让进程内的内存状态对其他进程可见。CPU 使用了很多技术去尝试和适应这样的事实:CPU 执行单元的性能已远远超出主内存性能。在我的“Writing Combining”文章,我只是谈及其中一种技术。CPU 使用的用来隐转载 2015-02-01 14:40:01 · 695 阅读 · 0 评论 -
还是说Memory Model,gcc的__sync_synchronize要慎用。
当我们在做多线程编程的时候,会涉及到一个称为memory order的问题。例如int x(0),y(0);x=4;y=3;请问,实际执行的时候,这两条赋值语句谁先执行,谁后执行? 会不会有某个时间点,在某个CPU看来,y比x大?答案很复杂。本文的目的是从非常实践的角度来考虑这个问题。首先,它分为两个层面。在编译器看来,x和y是两个没有关联的变量,那转载 2015-02-01 13:20:41 · 4800 阅读 · 0 评论 -
GCC 提供的原子操作
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and转载 2014-12-24 19:28:10 · 414 阅读 · 0 评论