最新 | 最热门 | 最高评价

+0  《程序员的自我修养》中关于加锁不能保证线程安全的一个错误

Tag: 并行编程 | memory visibility | Pthreads | 原子操作 | 多线程编程 | 线程安全
Guancheng (G.C.) 发于 2011年04月09日 08:49 | 点击: 2731 | 展开摘要
在《程序员的自我修养 — 链接装载与库》一书第28页“过度优化”这一节中,作者提到了编译器优化可能造成多线程bug的情况(我手中的是09年6月第二次印刷那版)。原文如下:

线程安全是一个非常烫手的山芋,因为即使合理的使用了锁,也不一定能保证线程安全,这是源于落后的编译器技术已经无法满足日益增长的并发需求。很多看似无错的代码在优化和并发前又产生了麻烦。最简单的例子,让我们看看如下代码:

x = 0;

Thread 1 Thread 2

lock

查看全文: http://www.udpwork.com/item/4758.html

+0  剖析为什么在多核多线程程序中要慎用volatile关键字?

Tag: 并行编程 | Pthreads | volatile | 原子操作 | 多核 | 多线程Bug | 多线程内存模型 | 多线程编程 | 线程同步 | 线程安全
Guancheng (G.C.) 发于 2010年12月04日 16:46 | 点击: 3435 | 展开摘要
这篇文章详细剖析了为什么在多核时代进行多线程编程时需要慎用volatile关键字。

主要内容有:

1. C/C++中的volatile关键字

2. Visual Studio对C/C++中volatile关键字的扩展

3. Java/.NET中的volatile关键字

4. Memory Model(内存模型)

5. Volatile使用建议

1. C/C++中的volatile关键字

1.1 传统用途

C/C++作为系统级语言,它们与硬件的联系是很紧密的。

查看全文: http://www.udpwork.com/item/3673.html

+0  多线程程序常见Bug剖析(上)

Tag: 并行编程 | 原子操作 | 多核 | 多线程Bug | 死锁 | 线程同步
Guancheng (G.C.) 发于 2010年11月13日 22:59 | 点击: 2390 | 展开摘要
编写多线程程序的第一准则是先保证正确性,再考虑优化性能。本文重点分析多线程编程中除死锁之外的另两种常见Bug:违反原子性(Atomicity Violation)和违反执行顺序(Ordering Violation)。现在已经有很多检测多线程Bug的工具,但是这两种Bug还没有工具能完美地帮你检测出来,所以到目前为止最好的办法还是程序员自己有意识的避免这两种Bug。本文的目的就是帮助程序员了解这两种Bug的常见形式和常见解决办法。

1. 多线程程序执行模型

在剖析Bug之

查看全文: http://www.udpwork.com/item/3414.html

+0  多线程程序中操作的原子性

Tag: 并行编程 | 原子操作 | 多核 | 多线程编程 | 线程安全
Guancheng (G.C.) 发于 2010年04月15日 23:49 | 点击: 2642 | 展开摘要
0. 背景

原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?

1. 多线程环境下对变量的读写操作是否是原子的?

我们先从一道很热门的百度笔试题讲起。很多人讲不清楚其背后的原理,下面我们就来对它进行一下剖析(

查看全文: http://www.udpwork.com/item/1191.html
|<<<1>>>| 一共1页, 4条记录