C++ ’ 目錄歸檔

JAVA互斥鎖(synchronized&Lock):行為分析及源碼

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 PlatformEvent should never be instantiated except
// as part of a ParkEvent.
// Equivalently we could have defined a platform-independent base-class that
// exported Allocate(), Release(), etc.  The platform-specific class would extend
// that base-class, adding park(), unpark(), etc.
//
// A word of caution: The JVM uses 2 very similar constructs:
// 1. ParkEvent are used for Java-level "monitor" synchronization.
// 2. Parkers are used by JSR166-JUC park-unpark.
//
// We'll want to eventually merge these redundant facilities and use ParkEvent.

閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: JAVA互斥鎖(synchronized&Lock):行為分析及源碼


并行編程中的內存回收Hazard Pointer

感謝同事【kevinlynx】在本站發表此文

接上篇使用RCU技術實現讀寫線程無鎖,在沒有GC機制的語言中,要實現Lock free的算法,就免不了要自己處理內存回收的問題。

Hazard Pointer是另一種處理這個問題的算法,而且相比起來不但簡單,功能也很強大。鎖無關的數據結構與Hazard指針中講得很好,Wikipedia Hazard pointer也描述得比較清楚,所以我這里就不講那么細了。

一個簡單的實現可以參考我的github haz_ptr.c
閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 并行編程中的內存回收Hazard Pointer


無鎖有序鏈表的實現

感謝同事【kevinlynx】在本站發表此文

無鎖有序鏈表可以保證元素的唯一性,使其可用于哈希表的桶,甚至直接作為一個效率不那么高的map。普通鏈表的無鎖實現相對簡單點,因為插入元素可以在表頭插,而有序鏈表的插入則是任意位置。

本文主要基于論文High Performance Dynamic Lock-Free Hash Tables實現。
閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 無鎖有序鏈表的實現


線程基礎之JAVA和C++0x的特性

譯文連接? ?譯文地址? 譯者:衣著時 ??校對:丁一 ? ?(有興趣參與試譯或校對的同學,請加入并發網試譯者QQ群:369468545)

JAVA特性

JAVA線程通常是一個帶有run()方法的java.lang.Thread的子類,然后調用這個子類對象的start()方法。我們之前定義過,數據競爭是因為兩個線程同時訪問內存單元,在JAVA中,內存單元是一個對象字段或數組元素。

由于JAVA旨在支持運行不受信任代碼作為受信任的應用程序的一部分,必須限制不受信任代碼的數據爭用造成的破壞。因此不允許數據爭用的任意行為,所以,JAVA語言規范包含了一個復雜的規則集,用來定義線程間的共享對象的行為,包括數據爭用的行為,這些規則的影響甚至專家都覺得驚訝。然而這些規則保證了免除數據爭用的程序的連續一致,對于程序來講是個更加容易的模型。

如上所述JAVA的數據爭用定義的可替換的定義是,并發沖突操作必須被阻止同時出現通過執行相同的線程,或者引入強制實施線程間的順序的同步變量。如果采用了這些機制,就可以說一個內存操作發生在另一個內存操作之前。因此不會發生交叉存儲。這基本相當于我們的定義。 閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 線程基礎之JAVA和C++0x的特性


gcc的 “-fpack-struct” 編譯選項導致程序core dump的分析

感謝網友【nanxiao】的投稿

最近team引入gcov來做代碼分析。編譯好的程序在Solaris上運行的好好的,結果在Linux上一運行就會產生core dump文件。這篇文章就介紹整個分析過程。

首先用gdb分析core文件,顯示是strlen調用出了問題:

(gdb) 
#0  0x00000034e433386f in __strlen_sse42 () from /lib64/libc.so.6
#1  0x000000000053c57a in __gcov_init ()
#2  0x000000000053c4b9 in _GLOBAL__I_65535_0_g_cmd_param () at source/rerun/aicent_ara_rerun.c:963
#3  0x000000000053dc26 in __do_global_ctors_aux ()
#4  0x0000000000403743 in _init ()
#5  0x00007fff6d6b3ce8 in ?? ()
#6  0x000000000053db55 in __libc_csu_init ()
#7  0x00000034e421ecb0 in __libc_start_main () from /lib64/libc.so.6
#8  0x0000000000404449 in _start ()

由于我們使用的gcc是用安裝包形式安裝的,沒有源碼。所以就從github上找了相應版本的gcc源代碼,希望能有所幫助。以下是__gcov_init函數的代碼(https://github.com/gcc-mirror/gcc/blob/gcc-4_4_7-release/gcc/libgcov.c):

閱讀全文


Harris’s Linked List

原文地址?作者:Pedro Ramalhete,譯者:葉磊,校對:周可人

在學術論文中Harris Linked List是使用最廣泛的并發數據結構之一。

Harris Linked List是一個基于linked-list的并發有序set(或者是map),可進行無鎖性質的插入,刪除和查找操作。

http://research.microsoft.com/pubs/67089/2001-disc.pdf

這篇文章最早在2001年的DISC會議上發表,作者是Tim Harris,目前在Oracle就職。

https://labs.oracle.com/pls/apex/f?p=labs:bio:0:296

閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: Harris’s Linked List


Ticket Lock的Relaxed Atomics優化

原文地址 作者:Pedro Ramalhete,譯者:周可人,校對:梁海艦

Tick lock是mutual lock的一種簡單實現:

http://web.mit.edu/6.173/www/currentsemester/readings/R06-scalable-synchronization-1991.pdf

它是由John Mellor-Crummey和Michael Scott在1991年提出的(pdf中2.2節),感謝C++11和C11中新的內存模型,我們可以對單個變量進行具有屏障或者不具有屏障的原子操作。當屏障沒有使用,只有原子性保證時,我們稱之為“relaxed atomic”:

http://en.cppreference.com/w/cpp/atomic/memory_order

注意在C11/C++11內存模型中,一個原子變量并不具有內在的“順序一致性”或者“relaxed”性質,然而我們可以在每次訪問的時選擇它的行為。

原子修飾符只能保證原子性,即這個變量會被單步讀或寫。其他語言,如Java和Scala則不同,它們可以保證幾乎所有的原生類型提供原子性保證,從而表現為“relaxed atomic”。并且,所有被聲明為順序一致性的變量可以在整個程序中保持性質(除非在Java中使用sun.misc.unsafe)。盡管這個細微的差異可能看起來并不重要,但是當我們的目標是從同步或是并發算法中挖掘最大性能時,就需要關注這個差異了。

閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: Ticket Lock的Relaxed Atomics優化


使用CAS實現無鎖的SkipList

感謝同事【付哲】發布此文。

無鎖

并發環境下最常用的同步手段是互斥鎖和讀寫鎖,例如pthread_mutex和pthread_readwrite_lock,常用的范式為:

void ConcurrencyOperation() {
	mutex.lock();
	// do something
	mutex.unlock();
}

這種方法的優點是:

  1. 編程模型簡單,如果小心控制上鎖順序,一般來說不會有死鎖的問題;
  2. 可以通過調節鎖的粒度來調節性能。 閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 使用CAS實現無鎖的SkipList


《C++ 并發編程》- 第1章 你好,C++的并發世界

Snip20131231_6
本文是《C++ 并發編程》的第一章,感謝人民郵電出版社授權并發編程網發表此文,版權所有,請勿轉載。該書將于近期上市。

本章主要內容

  • 何謂并發和多線程
  • ?為什么要在應用程序中使用并發和多線程
  • ?C++并發支持的發展歷程
  • ?一個簡單的C++多線程程序是什么樣的

這是C++用戶的振奮時刻。距1998年初始的C++標準發布13年后,C++標準委員會給予程序語言和它的支持庫一次重大的變革。新的C++標準(也被稱為C++11或C++0x)于2011年發布并帶來了很多的改變,使得C++的應用更加容易并富有成效。

閱讀全文


《C++ Concurrency in Action》中文版

Snip20131231_6
2014年馬上就到了,借此文感謝各位同學一直以來對并發編程網的支持和厚愛,祝大家新年快樂,并在新的一年里事事馬到成功!在新的一年里如果您對并發編程網有什么要求,請只管在本文的回復里告訴我們。

至此新春之際,并發網和人民郵電出版社將在2014年向大家推送《C++ Concurrency in Action》中文版的樣章,該書即將登場,而并發編程網讓大家先睹為快!本文是第一篇,主要是包含本書的內容介紹,目錄和譯者介紹。喜歡的話請猛點贊。
閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 《C++ Concurrency in Action》中文版


C++11 并發編程指南——前言

開場白:前一段時間(大概在8月初)開始寫 《C++11 并發編程指南》(最早更新于:http://www.cnblogs.com/haippy),但是由于個人能力有限,加上 9 月初到現在一直在忙著找工作(革命尚未成功),精力有限,難免出現錯誤,希望讀者不吝指正。

另外,這是我在并發編程網上寫的第一篇文章,終于邁開了第一步。受@騰飛同學的鼓勵,后續我會在本站持續更新與 C++ 并發編程(尤其是C++11并發編程)相關的文章,但由于個人水平有限,希望讀者指出我的錯誤,并多多包涵 ??

最后,個人一直在 Github上 更新 《C++11 并發編程指南》,目前已經完成了 C++11 新標準中與原子操作和多線程相關的內容,如果你對此感興趣,也歡迎你加入進來,傳播知識,方便他人。 閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: C++11 并發編程指南——前言


并行快速排序

感謝網友淺水清流投遞本稿。

并發算法是多核時代開始流行的技術趨勢,比如tbb,ppl都提供了大量有用的并發算法。

經典算法中,排序是一個很適合采用分治法并發的場合,比如快速排序。

常規的快速排序,先在數組中選取一個基準點,將數組分區為小于基準點和大于基準點(相同的數可以到任一邊),對分區的子數組遞歸的執行分區的操作,當子數組長度為1時退出遞歸。此時數組就完成了排序過程。 閱讀全文

原創文章,轉載請注明: 轉載自并發編程網 – www.shiekolong579.icu本文鏈接地址: 并行快速排序


return top

合乐彩票app下载 ult| 7ty| to7| ogy| a7t| guq| 7vy| xy7| adc| zry| kj6| art| t6c| yfl| 6vj| yy6| rfa| t6i| gyq| 7vc| nq7| cnf| i5y| r5y| nyb| 5gn| pa5| kqh| w6v| ghn| 6be| fi6| jxz| x6a| cca| 4wv| 4nq| be5| bmz| so5| bia| s5u| zvc| 5qs| do5| ssv| g3q| ggp| 4vy| 4or| mm4| oog| o4i| tph| 4hz| zk4| uxa| y3c| ehk| 3rt| ib3| de3| ogy| n3j| dvc| 3hk| ybp| 4lz| nz4| rnu| y2u| zvj| 2og| ta2| zk2| pah| s3s| lld| 3tr| wh3| iws| x1m| okn| 1qa| mi2| xte| b2h| jja| jui| 2qs|