linux多執行緒入門(二)互斥量
當多個執行緒訪問一個共享的變數的時候是非常危險的,可能會拿到錯誤的資料或者程式崩潰!
所以為了安全的使用執行緒引入了互斥量的做法
兩個互斥量的函式為
pthread_mutex_lock(pthread_mutex_lock* lock)
pthread_mutex_unlock(pthread_mutex_lock* lock)
具體使用也很簡單
static int total_count;//全域性變數 pthread_mutex lock = PTHREAD_MUTEX_INITIALIZER;//申請個互斥鎖並且給其初始化 在每個執行緒裡修改total_count全域性變數的地方新增上 pthread_mutex_lock(&lock); //加鎖 total_count++; //修改共享變數的值 pthread_mutex_unlock(&lock); //解鎖
互斥量的作用在於當這個變數lock的時候,別的執行緒去也執行到這個lock的地方,那就會在這個地方掛起等待這個變數的解鎖。當鎖被另外一個執行緒解開的時候,另外執行緒就會在lock的地方結束掛起,繼續執行,lock鎖然後去操作變數。如果有一個執行緒不遵守這個規則直接去修改變數那就沒辦法了,這個就是沒加鎖導致執行緒不安全的隱患了。
相關推薦
linux多執行緒入門(二)互斥量
當多個執行緒訪問一個共享的變數的時候是非常危險的,可能會拿到錯誤的資料或者程式崩潰! 所以為了安全的使用執行緒引入了互斥量的做法 兩個互斥量的函式為 pthread_mutex_lock(pthread_mutex_lock* lock) pthread_mutex_unlock(p
JAVA多執行緒入門(二):JAVA中如何寫多執行緒
第一種方式:繼承Thread 步驟: 1.建立執行緒類,繼承自Thread + 重寫run,run中寫執行緒體,執行緒體就是mian()函式裡面的寫法 2.使用執行緒: 2.1 建立執行緒物件 2.2 執行緒物件.start() 步驟展示: 1. public
Linux 多執行緒程式設計(二)
執行緒管理執行緒管理包含了執行緒的建立、終止、等待、分離、設定屬性等操作。1 執行緒 ID執行緒 ID 可以看作為執行緒的控制代碼,用來引用一個執行緒。Pthreads 執行緒有一個 pthread_t 型別的 ID 來引用。執行緒可以通過呼叫 pthread_self()函
Linux學習之多執行緒程式設計(二)
言之者無罪,聞之者足以戒。 ——《詩序》 (二)、執行緒的基本控制 1、終止程序: 如果程序中的任意一個程序呼叫了exit、_exit、_Exit,那麼整個程序就會終止 普通的單個程序有以下3種退出方式,這樣不會終止程序: (1)從啟動例程中返回,返回值是執行緒的退
java多執行緒之(二)鎖
一,鎖 在物件的建立時java會為每個object物件分配一個monitor( 監視器或者監視鎖),當某個物件的同步方法(synchronized methods )被多個執行緒呼叫時,該物件的monitor將負責處理這些訪問的併發獨佔要求。 當一個執行緒呼叫一個物件的同步方法時(sy
java多執行緒-初探(二)
java多執行緒-初探(一) 常見的執行緒函式 sleep 當前執行緒暫停 join 加入到當前執行緒中 setPriority 執行緒優先順序
Linux多執行緒學習(三)pthread_key_create
函式 pthread_key_create() 用來建立執行緒私有資料。該函式從 TSD 池中分配一項,將其地址值賦給 key 供以後訪問使用。第 2 個引數是一個銷燬函式,它是可選的,可以為 NULL,為 NULL 時,則系統呼叫預設的銷燬函式進行相關的資料登出。如果不為空
多執行緒程式設計(二)——面試題,每個執行緒只打印一種字元,多個執行緒協同順序列印n次字串(求大神的其他實現方案)
(這個是歡聚時刻(YY)的筆試題,在筆試的時候沒有寫出來,後來自己寫了出來,希望大神能給出更優秀的解決方案……ps:現在面試官總有面試時問筆試程式設計題思路的習慣,呵呵) 題目簡述: 輸入一個字串以
Linux 多執行緒程式設計(一)
Linux 多執行緒程式設計 執行緒(Thread)已被許多作業系統所支援,包括Windows/NT ,Linux 以前的多執行緒其實是多程序,而現在意味著一個程序中有多個執行緒 使用多執行緒的原因(多執行緒的優點): 1.“節省”,啟動一個新的程序需要分配給它獨立的地
Linux多執行緒實踐(四 )執行緒的特定資料
在單執行緒程式中,我們經常要用到"全域性變數"以實現多個函式間共享資料, 然而在多執行緒環境下,由於資料空間是共享的,因此全域性變數也為所有執行緒所共有。但有時應用程式設計中有必要提供執行緒私有的全域
多執行緒系列(二)---多個執行緒多個鎖
多個執行緒多個鎖:多個執行緒,每個執行緒都可以拿到自己指定的鎖,分別獲得鎖之後,執行synchronized方法體內容。 關鍵字synchronized取得的鎖都是物件鎖,而不是把一段程式碼(方法)當
C++多執行緒系列(二)執行緒互斥
首先了解一下執行緒互斥的概念,執行緒互斥說白了就是在程序中多個執行緒的相互制約,如執行緒A未執行完畢,其他執行緒就需要等待! 執行緒之間的制約關係分為間接相互制約和直接相互制約。 所謂間接相互制約:一個系統中的多個執行緒必然要共享某種系統資源如共享CPU,共享印表機。間接制
多執行緒學習(二):執行緒間的資料共享
資料不共享的情況 public class MyThread04 extends Thread{ private int count=5; public MyThread04(String threadName) { this.setName(threadName); }
C++——多執行緒程式設計(二)std::mutex 執行緒同步、解決資源競爭問題
前言 執行緒同步 這裡的“同”不是同時、一起執行的意思,而是指協同、協助、互相配合。執行緒同步是指多個執行緒協同步調,按預定的先後次序進行執行。 執行緒A和B一塊配合,A執行到一定程度時要依靠B的某個結果,於是停下來,示意B執行;B依言執行,再將結果給A;
linux多執行緒學習(七)——實現“生產者和消費者”
在上一篇文章中,利用訊號量實現了執行緒間的互斥,這一篇將要利用訊號量的互斥同步機制來實現一個經典例項,就是“生產者和消費者”。 1、簡單描述生產者和消費者的問題。 有一個緩衝區和兩個執行緒:生產者和消費者。生產者把產品放入緩衝區,而消費者從緩衝區中拿走。當緩衝區滿時,生產者必
java多執行緒程式設計(二)
java多執行緒程式設計(二) volatile、synchronized及鎖對比 volatile的使用優化 1、追加位元組能優化效能 如果佇列的頭節點和尾節點都不足64位元組的話,處理器會將他們都讀到同一個快取記憶體行中,在多處理器 下每個處理器都會
多執行緒程式設計(二)——執行緒結束後的處理&主服務存活方法
應用場景: 伺服器,建立了多個服務子執行緒,而後主執行緒“無所事事”,程序會被關閉,導致子執行緒sleepA和sleepB無法正常執行完成。(假設sleepA()和sleepB()都是沉睡若干秒的函式,這個肯定要比程式執行到main結束那幾步所花費時間要長) int ma
c++11多執行緒程式設計(二):joining和detaching 執行緒
Joining執行緒 執行緒一旦啟動,另一個執行緒可以通過呼叫std::thread物件上呼叫join()函式等待這個執行緒執行完畢std::thread th(funcPtr); th.join(); 看一個例子主執行緒啟動10個工作執行緒,啟動完畢後,main函式等待
linux 多執行緒程式設計(轉)
2009-07-16 17:10 45人閱讀 評論(0) 收藏 舉報 1 引言 執行緒(thread)技術早在60年代就被提出,但真正應用多執行緒到作業系統中去,是在80年代中期,solaris是這方面的佼佼者。傳統的Unix也支援執行緒的概念,但是在一個程序(
Linux多執行緒程式設計(一)
什麼是執行緒 先來舉一個我們生活中的例項,我們都使用過一個強大的軟體—迅雷。那你必然知道迅雷有一個邊下邊播的功能,我們在下載的時候還能同時進行觀看。這就是一個多執行緒例項。 執行緒是程序內部的執行分支。 開啟迅雷軟體—–向系統核心索要資源,啟動“迅雷”程