1. 程式人生 > >程序間同步和互斥

程序間同步和互斥

程式設計思想之多執行緒與多程序(1)——以作業系統的角度述說執行緒與程序》一文詳細講述了執行緒、程序的關係及在作業系統中的表現,《程式設計思想之多執行緒與多程序(2)——執行緒優先順序與執行緒安全》一文講了執行緒安全(各種同步鎖)和優先順序,這是多執行緒學習必須瞭解的基礎。本文將接著講一下C++中多執行緒程式的開發.這裡主要講Windows平臺執行緒的用法,建立執行緒要呼叫windows API的CreateThread方法。

建立執行緒

在Windows平臺,Windows API提供了對多執行緒的支援。前面程序和執行緒的概念中我們提到,一個程式至少有一個執行緒,這個執行緒稱為主執行緒(main thread),如果我們不顯示地建立執行緒,那我們產的程式就是隻有主執行緒的間執行緒程式。
下面,我們看看Windows中執行緒相關的操作和方法:

CreateThread與CloseHandle

CreateThread用於建立一個執行緒,其函式原型如下:

1 2 3 4 5 6 7 8 HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES   lpThreadAttributes, //執行緒安全相關的屬性,常置為NULL SIZE_T                  dwStackSize,        //新執行緒的初始化棧在大小,可設定為0 LPTHREAD_START_ROUTINE  lpStartAddress,    
//被執行緒執行的回撥函式,也稱為執行緒函式 LPVOID                  lpParameter,        //傳入執行緒函式的引數,不需傳遞引數時為NULL DWORD                   dwCreationFlags,    //控制執行緒建立的標誌 LPDWORD                 lpThreadId          //傳出引數,用於獲得執行緒ID,如果為NULL則不返回執行緒ID );

**說明:**lpThreadAttributes:指向SECURITY_ATTRIBUTES結構的指標,決定返回的控制代碼是否可被子程序繼承,如果為NULL則表示返回的控制代碼不能被子程序繼承。

dwStackSize :執行緒棧的初始化大小,位元組單位。系統分配這個值對

lpStartAddress:指向一個函式指標,該函式將被執行緒呼叫執行。因此該函式也被稱為執行緒函式(ThreadProc),是執行緒執行的起始地址,執行緒函式是一個回撥函式,由作業系統線上程中呼叫。執行緒函式的原型如下:

1 DWORD WINAPI ThreadProc(LPVOID lpParameter); //lpParameter是傳入的引數,是一個空指標

lpParameter:傳入執行緒函式(ThreadProc)的引數,不需傳遞引數時為NULL

dwCreationFlags:控制執行緒建立的標誌,有三個型別,0:執行緒建立後立即執行執行緒;CREATE_SUSPENDED:執行緒建立後進入就緒狀態,直到執行緒被喚醒時才呼叫;STACK_SIZE_PARAM_IS_A_RESERVATION:dwStackSize 引數指定執行緒初始化棧的大小,如果STACK_SIZE_PARAM_IS_A_RESERVATION標誌未指定,dwStackSize將會設為系統預留的值。

返回值:如果執行緒建立成功,則返回這個新執行緒的控制代碼,否則返回NULL。如果執行緒建立失敗,可通過GetLastError函式獲得錯誤資訊。

1 BOOL WINAPI CloseHandle(HANDLE hObject); //關閉一個被開啟的物件控制代碼

可用這個函式關閉建立的執行緒控制代碼,如果函式執行成功則返回true(非0),如果失敗則返回false(0),如果執行失敗可呼叫GetLastError.函式獲得錯誤資訊。

【Demo1】:建立一個最簡單的執行緒

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

相關推薦

程序同步互斥

《程式設計思想之多執行緒與多程序(1)——以作業系統的角度述說執行緒與程序》一文詳細講述了執行緒、程序的關係及在作業系統中的表現,《程式設計思想之多執行緒與多程序(2)——執行緒優先順序與執行緒安全》一文講了執行緒安全(各種同步鎖)和優先順序,這是多執行緒學習必須瞭解的基礎。本文將接著講一下C++中多

一起talk C栗子吧(第一百回:C語言例項--使用訊號量進行程序同步互斥一)

各位看官們,大家好,上一回中咱們說的是程序間同步與互斥的例子,這一回咱們說的例子是:使用訊號量進行程序間同步與互斥。閒話休提,言歸正轉。讓我們一起talk C栗子吧! 看官們,訊號量是由著名電腦科學家迪傑斯特拉(Dijkstra)提出的一種概念,專門用來

Linux多執行緒程式設計---執行緒同步互斥鎖、條件變數、訊號量讀寫鎖)

本篇博文轉自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖、條件變數、訊號量和讀寫鎖。  下面是思維導

程序通訊執行緒同步區別

執行緒間通訊:由於多執行緒共享地址空間和資料空間,所以多個執行緒間的通訊是一個執行緒的資料可以直接提供給其他執行緒使用,而不必通過作業系統(也就是核心的排程)。 程序的通訊機制主要有:管道、有名管道、訊息佇列、訊號量、共享空間、訊號、套接字。 linux中程序間通訊和執行緒間通訊的區別:

程序同步的基本概念:臨界資源、同步互斥

在多道程式環境下,程序是併發執行的,不同程序之間存在著不同的相互制約關係。為了協調程序之間的相互制約關係,引入了程序同步的概念。 臨界資源 雖然多個程序可以共享系統中的各種資源,但其中許多資源一次只能為一個程序所使用,我們把一次僅允許一個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源

執行緒機制(同步互斥

執行緒間機制 { 多執行緒共享同一個程序子地址空間 優點: 執行緒間很容易進行通訊 1、 通過全域性變數實現資料共享和交換 缺點: 多個執行緒同時訪問共享物件時需要引入同步和互斥機制 }

淺談程序同步互斥的概念

簡介     程序同步是一個作業系統級別的概念,是在多道程式的環境下,存在著不同的制約關係,為了協調這種互相制約的關係,實現資源共享和程序協作,從而避免程序之間的衝突,引入了程序同步。 臨界資源     在作業系統中,程序是佔有資源的最小單位(執行緒可以訪問其所在

程序同步互斥的關係

程序的同步和互斥是併發程序的兩種重要的關係,程序互斥反映了程序間的競爭的關係,程序同步反映了程序間協作的關係,從以上對程序互斥和同步的分析中,程序互斥其實就是一種特殊的程序的同步,例如,程序的互斥是

程序同步互斥經典問題(一)生產者-消費者問題

問題描述: 生產者-消費者問題,也叫做快取繫結問題(bounded-buffer),是一個多程序同步問題。 即有兩個程序:製造少和消費者,共享一個固定大小的快取 製造商的工作是製造一段資料,放進快取,如此重複。 消費者一次消費一段資料

程序互斥程序同步 & 訊息通訊機制的同步、非同步

程序的互斥、同步: 互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。   同步:是指在互斥的基礎上(大多數情況),通過其

同步互斥——生產者消費者程序

一、同步和互斥的概念<?xml:namespace prefix = o /> 什麼是同步?什麼是互斥? 同步是一種時序關係。如規定了程序1處理完事情A後,程序2才能處理事情B,經典的同步問題是生產者和消費者間的同步. 互斥描述的是一種獨佔關係.如任一時刻,進城1

線程同步互斥的區別

之間 方法 無法 spa lock zed 模式 col 一定的 互斥是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。 同步是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。

python-Event事件線程同步互斥

sse logs pan else 控制 事件 utf-8 event Coding 1 #!/usr/bin/python 2 #coding=utf-8 3 #用於線程間通信,通過事件標識控制 4 import threading 5 from time

python-Lock鎖線程同步互斥

() print b+ != val threading true pytho color 1 #!/usr/bin/python 2 #coding=utf-8 3 #線程間通信的同步與互斥操作-鎖 4 import threading 5 a=b=0 6

todo:進程的同步互斥

style tro 生產 哲學家 問題 str 同步 消費 哲學家進餐問題 1、生產者--消費者問題 2、讀者--寫者問題 3、哲學家進餐問題todo:進程的同步和互斥

用訊號量解決程序同步互斥

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

挑戰408——作業系統(9)——程序同步互斥

作業系統中的併發程序有些是獨立的有些需要相互協作,獨立的程序在系統中執行不影響其他程序,也不被其他程序影響(因為他們沒有共同需要一起用到的資源)。而另外一些程序則需要與其他程序共享資料,以完成一項共同的任務。 因此,為了保證作業系統的正常活動,使得程式的執行具有

共享記憶體多程序通訊,程序同步使用訊號量來實現

Linux 環境下C程式設計指南,通過共享記憶體進行程序間通訊的例子,程序間同步使用訊號量來實現。 程式碼 11-5 使用說明:這是一個簡單的伺服器和客戶端程式,如果啟動程式時不帶引數,則執行伺服器程式; 如果帶引數,則執行客戶端程式,所帶引數只有一個,就是伺服器端所顯

三十九、Linux 執行緒——執行緒的同步互斥

39.1 概念 執行緒同步 是一個巨集觀概念,在微觀上包含執行緒的相互排斥和執行緒先後執行的約束問題 解決同步方式 條件變數 執行緒訊號量 執行緒互斥 執行緒執行的相互排斥 解決互斥的方式

三十九、Linux 線程——線程的同步互斥

cdi 案例 turn size 文件替換 .com pwd || col 39.1 概念 線程同步 是一個宏觀概念,在微觀上包含線程的相互排斥和線程先後執行的約束問題 解決同步方式 條件變量 線程信號量 線程互斥 線程執行的相互排斥 解決互斥的方式 互斥