AtomicStampedReference解决ABA问题
在运用CAS做Lock-Free操作中有一个经典的ABA问题:
线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题,例如下面的例子:...
分类:
其他好文 时间:
2014-08-13 13:16:06
阅读次数:
204
By Andrei Alexandrescu, October 01, 2004
Post a Comment
Lock-free data structures guarantee the progress of at least one thread when executing mutlithreaded procedures, thereby helping you avoid d...
分类:
其他好文 时间:
2014-08-11 18:01:02
阅读次数:
384
lock就是把一段代码定义为临界区,所谓临界区就是同一时刻只能有一个线程来操作临界区的代码,当一个线程位于代码的临界区时,另一个线程不能进入临界区,如果试图进入临界区,则只能一直等待(即被阻止),直到已经进入临界区的线程访问完毕,并释放锁旗标。其基本使用方式如下:C-sharp代码 classTes...
分类:
Web程序 时间:
2014-08-11 17:40:12
阅读次数:
433
使用yum命令时,出现:Existinglock/var/run/yum.pid:anothercopyisrunningaspid:3355.Anotherappiscurrentlyholdingtheyumlock;waitingforittoexit...Theotherapplicationis:yum-updatesd-he……主要原因就是yum在自动更新只要关掉他就可以了解决方案:直接输入rm-f/var/run/y..
分类:
其他好文 时间:
2014-08-11 15:21:03
阅读次数:
190
按照官网上的安装方法:在ubuntu系统下有可能出现如下错误:couldn't remove fs lock errno:9 Bad file descriptor此时需要修改文件所有者$ sudo mkdir -p /data/db/$ sudo chown ’USERNAME‘ /data/db...
分类:
数据库 时间:
2014-08-11 14:53:52
阅读次数:
248
无锁编程以及CAS
无锁编程 / lock-free / 非阻塞同步
无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。
实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。
lock-free是目前最...
分类:
其他好文 时间:
2014-08-11 11:58:42
阅读次数:
321
从下面的例子中可以看到,在生产数据库中对象的重新编译会导致library cache lock,所以应该尽量避免在业务高峰期编译对象。如果是package或过程中存在复杂的依赖关系就极易导致library cache lock的出现,所以在应用开发的过程中,也应该注意这方面的问题。
SQL> select * from v$version;
BANNER
--------------...
分类:
数据库 时间:
2014-08-11 11:57:52
阅读次数:
251
C#读写文本文件一般都是用StreamWriter来实现(读书的时候就这样用,毕业后这几年基本也是这样干的),通常代码如下:
using (StreamWriter sw = new StreamWriter(logpath,true,Encoding.UTF8))
{
sw.WriteLine(msg);
}
如果是web开发或则其他多线程的时候一般都是加锁(用lock),如果...
分类:
其他好文 时间:
2014-08-10 18:45:00
阅读次数:
234
上一篇介绍了因为子表过多,导致innodb crash的情况,但crash的原因是long semaphore waits。long semaphore waits又为何物?背景:Innodb使用了mutex和rw_lock来保护内存数据结构,同步的机制要么是互斥,要么是读写阻塞的模式, Innod...
分类:
数据库 时间:
2014-08-09 22:59:39
阅读次数:
776
1. 死锁
在多个mutex存在的时候,可能就会产生死锁。
避免死锁的一个最通用的方法是,总是按照相同的顺序来lock the two mutexes, 即总是先于mutex B之前lock mutex A,这样就不会有死锁的可能。有时,这种方法很简单实用,当这些mutexes用于不同的目标。但是,当mutexes用于包含相同类的一个实例时,就不是那么容易了。
例如,如下面程序所...
分类:
编程语言 时间:
2014-08-09 18:47:19
阅读次数:
303