![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 86
Pslydhh
能力者
展开
-
Java Thread&Concurrency(8): 深入理解CompletionService接口及其实现
/** * FutureTask extension to enqueue upon completion */ private class QueueingFuture extends FutureTask { QueueingFuture(RunnableFuture task) { super(task, null);原创 2014-06-12 16:27:54 · 748 阅读 · 0 评论 -
Scalable Hazard Pointers
由于我对于Java并发库JUC的深入了解,一直以来有个想法,能不能把Java并发库移植到纯C语言环境下,并且在实现、使用方式上都与Java平台保持相当程度的相似性呢?纯C环境下内存模型与Java平台不一致?加上内存屏障(fence)或者lock指令就行。 C环境下缺少对象模型?无非是给每个数据块提供个*init方法(比如pthread_mutex_t的pthread_mutex_init,pthr...原创 2017-11-17 16:14:32 · 585 阅读 · 0 评论 -
pthread_mutex_lock实现
void 4 __lll_lock_wait (int *futex, int private) 5 { 6 if (*futex == 2) 7 lll_futex_wait (futex, 2, private); /* Wait if *futex == 2. */ 8 9 while (atomic_exchange_acq (futex, 2) != 0)10 lll_futex_wait (futex, 2, private); /* Wait if *原创 2017-06-20 15:58:25 · 5450 阅读 · 0 评论 -
Java实现临界区:经典并发控制回顾
只要有一定的内存order保证,不通过比较并交换(CAS)那些需要硬件支持的原子操作,能不能实现一个互斥的临界区?答案是:能。计算机先驱djkstra,50多年前的这篇经典paper中就提出了解决方案。并且自这以后开启了如何通过一般编程语言实现并发控制的 研究。这里的假设我们有N个线程,代表序号分别为1-N,一个公共变量k用于辅助指示当前占有临界区的线程。临界区是critical原创 2017-06-28 11:31:48 · 1319 阅读 · 0 评论 -
pthread_mutex_unlock实现
我们接着看pthread_mutex_unlock的实现,会发现它跟pthread_mutex_lock形式差不多,并且底层调用futex换乐FUTEX_WAKE而已。直接贴路径代码:int__pthread_mutex_unlock (pthread_mutex_t *mutex){ return __pthread_mutex_unlock_usercnt (mutex, 1)原创 2017-06-20 16:30:23 · 6716 阅读 · 0 评论 -
JVM:锁实现(synchronized&JSR166)行为分析和相关源码
JVM中有这样一段注释:// The base-class, PlatformEvent, is platform-specific while the ParkEvent is// platform-independent. PlatformEvent provides park(), unpark(), etc., and// is abstract -- that is, a Pl原创 2017-06-28 11:35:46 · 2750 阅读 · 1 评论 -
Java Thread&Concurrency(9): 深入理解StampedLock及其实现原理
/** * Non-exclusively acquires the lock, blocking if necessary * until available. * * @return a stamp that can be used to unlock or convert mode */ public long readLock()原创 2014-06-12 16:30:02 · 3842 阅读 · 2 评论 -
Java Thread&Concurrency(5): 深入理解Phaser实现原理
public int arriveAndAwaitAdvance() { // Specialization of doArrive+awaitAdvance eliminating some reads/paths final Phaser root = this.root; for (;;) { long s = (roo原创 2014-06-12 16:10:44 · 1852 阅读 · 0 评论 -
Java Thread&Concurrency(4): 深入理解Exchanger实现原理
/** * Exchange function used until arenas enabled. See above for explanation. * * @param item the item to exchange * @param timed true if the wait is timed * @param ns if time原创 2014-06-12 16:05:21 · 2590 阅读 · 0 评论 -
Java Thread&Concurrency(11): 深入理解ThreadPoolExecutor及其实现原理
/** * Executes the given task sometime in the future. The task * may execute in a new thread or in an existing pooled thread. * * If the task cannot be submitted for execution, ei原创 2014-06-12 16:41:35 · 731 阅读 · 0 评论 -
Java Thread&Concurrency(3): 深入理解SynchronousQueue实现原理
/** * Puts or takes an item. */ @SuppressWarnings("unchecked") E transfer(E e, boolean timed, long nanos) { /* Basic algorithm is to loop trying to take e原创 2014-06-12 15:58:35 · 921 阅读 · 0 评论 -
Java Thread&Concurrency(7): 深入理解Callable/Future(FutureTask)接口及其实现
public void run() { if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return;原创 2014-06-12 16:25:38 · 882 阅读 · 0 评论 -
LockFreeHashMap:无阻塞代码技巧
10年前,cliff click博士就为关联数据结构ConcurrentHashMap给出了一个采用open Address的无阻塞实现(NonBlockingHashMap)。其中为了减少线程之间执行顺序的依赖而采用的算法充满技巧性。这个算法宣称是无锁,几乎可以保证任何时候停止某个特定线程都不会导致整体进程的停止(极端情况下,这一点还是会阻塞整个进程的)。本文尝试详细地分析其中的完整代码,从原创 2017-06-30 17:01:21 · 1166 阅读 · 0 评论