1. 程式人生 > >同一程序下執行緒共享的資料和獨有的資料

同一程序下執行緒共享的資料和獨有的資料

  在 windows 等平臺上,不同執行緒預設使用同一個堆,所以用 C 的 malloc (或者 windows 的 GlobalAlloc)分配記憶體的時候是使用了同步保護的。如果沒有同步保護,在兩個執行緒同時執行記憶體操作的時候會產生競爭條件,可能導致堆內記憶體管理混亂。比如兩個執行緒分配了統一塊記憶體地址,空閒連結串列指標錯誤等。 

  Symbian 的執行緒一般使用獨立的堆空間。這樣每個執行緒可以直接在自己的堆裡分配和釋放,可以減少同步所引入的開銷。當執行緒退出的時候,系統直接回收執行緒的堆空間,執行緒內沒有釋放的記憶體空間也不會造成程序內的記憶體洩漏。 

  但是兩個執行緒使用共用堆的時候,就必須用 critical section 或者 mutex 進行同步保護。否則程式崩潰時早晚的事。如果你的執行緒需要在共用堆上無規則的分配和釋放任何數量和型別的物件,可以定製一個自己的 allcator,在 allocator 內部使用同步保護。執行緒直接使用這個 allocator 分配記憶體就可以了。這相當於實現自己的 malloc,free。但是更建議你重新審查一下自己的系統,因為這種情況大多數是不必要的。經過良好的設計,執行緒的本地堆應該能夠滿足大多數物件的需求。如果有某一類物件需要在共享堆上建立和共享,這種需求是比較合理的,可以在這個類的 new 和 delete 上實現共享保護。 

相關推薦

同一程序執行共享資料獨有資料

  在 windows 等平臺上,不同執行緒預設使用同一個堆,所以用 C 的 malloc (或者 windows 的 GlobalAlloc)分配記憶體的時候是使用了同步保護的。如果沒有同步保護,在兩個執行緒同時執行記憶體操作的時候會產生競爭條件,可能導致堆內記憶體管理混亂。比如兩個執行緒分配了統一塊記憶體

Java併發程式設計基礎//程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行棧程式計

1.實現多執行緒的兩種方式: (1)繼承Thread類; (2)實現Runnable介面 //程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行

程序執行的區別聯絡以及優缺點

什麼是執行緒? -在一個程式裡的一個執行路線就叫做執行緒。更準確的定義是:執行緒是“一個程序內部的控制序列”。 -一切程序至少都有一個執行執行緒 -執行緒也被叫做輕量級程序 什麼是程序? -程序是程式的一個執行的例項。 -程序是正在執行的程式。 -程序是能分配處理器並由處

Linux執行的概念使用

一. 概念   首先Linux並不存在真正的執行緒,Linux的執行緒是使用程序模擬的。當我們需要在一個程序中同時執行多個執行流時,我們並不可以開闢多個程序執行我們的操作(32位機器裡每個程序認為它 獨享 4G的記憶體資源),此時便引入了執行緒,例如當我們既需

程序執行的區別聯絡

程序概念   程序是表示資源分配的基本單位,又是排程執行的基本單位。例如,使用者執行自己的程式,系統就建立一個程序,併為它分配資源,包括各種表格、記憶體空間、磁碟空間、I/O裝置等。然後,把該程序放人程序的就緒佇列。程序排程程式選中它,為它分配CPU以及其它有關資源,該程序才真正執行。所以,

程序執行的總結區別

對於程序和執行緒的區別,很多面試或者筆試都有涉及到。我想很多朋友跟我一樣,對他們都僅限於一些很粗很廣的定義和區分,對於很多細節一下子回答出來還是有一定難度的。下面我將對程序和執行緒做一個系統的總結,供大家參考。如文中有不妥的地方,歡迎大家指正。  一、概念上區分 程式:

執行的終止私有資料

linux下執行緒的終止有有兩種方式: 1.通過return從執行緒函式返回. 2.通過掉用 pthread_exit()使執行緒退出,pthread_exit在標頭檔案 pthread.h中申明. 函式原型:void pthread_exit(void * retva

執行共享資料的安全問題死鎖問題

多執行緒訪問共享變數的時候會出現執行緒安全的問題解決執行緒安全的問題:執行緒同步(同步程式碼塊、同步方法、同步鎖)1.同步程式碼塊synchronized(同步監視器){     //需要訪問的共享資料 } 同步監視器 : 俗稱“鎖”。可以使用任何物件充當。但是必須確定多個執

linux多執行開啟串列埠傳送接收資料

1 啟動執行緒1讀串列埠 2 等待3秒後 3 啟動執行緒2寫串列埠,傳送字串後關閉 4 等待10秒 5 關閉兩個執行緒 #include <pthread.h> #include <stdio.h> #include <sys/time.h> #include &

jvm中堆疊的資料共享執行共享

起初,我一直不清楚到底是堆共享還是棧共享,後來查閱了很多資料,有說是堆共享,又有說棧共享,直到最後我才瞭解到共享分為兩個:一個為資料共享,一個為執行緒共享。 先來分析資料共享: int a = 3;  int b = 3;  編譯器先處理int a = 3;首先它會在棧中

將 Win32 C/C++ 應用程式遷移到 POWER 上的 Linux,第 1 部分: 程序執行共享記憶體服務 (轉載)

特別是程序、執行緒和共享記憶體服務)到 POWER 上 Linux 的對映。本文可以幫助您確定哪種對映服務最適合您的需要。作者向您詳細介紹了他在移植 Win32 C/C++ 應用程式時遇到的 API 對映。概述有很多方式可以將 Win32 C/C++ 應用程式移植和遷移到 p

同一個程序中的執行共享的資源執行獨享的資源

執行緒共享的環境包括:程序程式碼段、程序的公有資料(利用這些共享的資料,執行緒很容易的實現相互之間的通訊)、程序開啟的檔案描述符、訊號的處理器、程序的當前目錄和程序使用者ID與程序組ID。 程序擁有這許多共性的同時,還擁有自己的個性。有了這些個性,執行緒才

計算機作業系統第二次實驗——執行共享程序中的資料

供大家交流學習,最好自己動手做,這樣才有最深切的體會。1.實驗目的利用pthread_create()函式建立一個執行緒,線上程中更改程序中的資料 ,瞭解執行緒與程序之間的關係。2.實驗軟硬體環境安裝Windows XP的計算機VirtualBox軟體,以及在其上安裝的Ubu

1、試對程式,程序執行的慨念功能進行比較?

答:程式 是計算機指令的集合它,以檔案的形式儲存在磁碟上。 程序是一個程式在其 自身的地址空間中的一次執行活動。 程序是資源申請、排程和獨立執行的單位,因此,它使用系統中的執行資源,而程式不能申請系統資源,不能被系統排程,也不能作為獨立執行的單位,因此,它不佔系統的執行資源。 執行緒:程序中的一個單一的連續控

程序執行執行基本概念

程序、執行緒和多執行緒基本概念 一、概念 1、程序(process) 狹義定義:程序就是一段程式的執行過程。 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

程序執行理解關係

程序 執行緒的含義 程序就是一個程式在一個數據集上的一次動態執行過程。 程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它

關於程序執行,多程序執行的網路程式設計

程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序

【筆記】程序執行的概念異同

一、程序 1.程序就是一個正在執行的程式。程序是作業系統分配資源的最小單位。 2.程序的缺點: (1)程序佔有系統資源; (2)程序的切換給作業系統帶來了額外的開銷; (3)建立新程序會把父程序的資源複製一份到子程序,如果建立多個程序,會佔用大量資源; (4)程序間的資料共享

C++11 多執行執行共享資料

共享資料的問題 這些在作業系統中都有詳細的介紹,可以回顧作業系統課程。。很典型的就是資料競爭問題。 互斥量保護資料 最原始的方式:使用std::mutex建立互斥量,使用成員lock()加鎖,使用成員unlock()解鎖。但是這種方式需要我們在每個函數出口都呼叫一次unloc

關於作業系統中程序執行任務之間的關係

  Vxworks系統中程序、執行緒和任務之間的關係