Symbian中的執行緒 程序及同步

2021-04-12 17:16:43 字數 1926 閱讀 5091

全域性記憶體塊:跨越多個程序直接訪問的記憶體塊。

建立自己的全域性記憶體塊可以通過rchunk api類

rchunk chk;

_lit(kchunkname,"my globla chunk");

tint rc=chk.createglobal(kchunkname,0x1000,0x5000);

其中createglobal()方法第乙個引數指定全域性記憶體塊的名稱。後面兩個引數為塊指定分配給它的物理ram和為塊保留的虛擬記憶體的數量。

再其他程序中要訪問全域性記憶體塊可以這樣操作。

rchunk chk;

_lit(kchunkname,"my globla chunk");

tint rc=chk.openglobal(kchunkname,0);

tint *ptr=(tint *)chk.base();

可以通過*ptr直接讀寫這塊記憶體。

rchunk::openglobal()第乙個引數指定了全域性記憶體塊的名稱,第二個引數用於說明塊是為唯讀(1)還是可寫的(0)

可以通過rchunk::ajust(tint newsize)方法來擴大塊的提交記憶體尺寸。

tint rc=chk.createglobal(kchunkname,0x1000,0x5000);

例如上面建立了乙個塊,ram提交給它0x1000位元組,塊的最大尺寸是0x5000

在這種情況下,只有用於讀寫的0x1000位元組的物理ram分配給了塊。但是隨後可以擴充該塊,例如:

chk.ajust(0x3000)

現在塊被分配了0x3000位元組的記憶體。

訊號量:

全域性訊號量:

建立全域性訊號量

rsemphore::createglobal(const tdesc &aname,tint acount,townertype atype=eownerprocess);

第乙個引數是訊號量的名稱,第二個引數是訊號量的標記計數。

第三個引數指定控制代碼的所有權。

eownerprocess標記該訊號量控制代碼可以在程序的任何位置進行訪問。

eownerthread表示它只能被建立的執行緒訪問。

開啟全域性訊號量

rsemphore::openglobal(const tdesc &aname,townertype atype=eownerprocess);或者

rsemphore::open(const tfindsemphore& afind,townertype atype=eownerprocess);

第乙個函式通過訊號量全名開啟它。

第二個函式使用tfindsemphore類,通過包含萬用字元字元的部分名稱開啟它。

例如_lit(kmatchname,"mysemphore*");

tfindsemphore semname(kmatchname);

rsemphore::open(semname)

開啟乙個全域性的訊號量。

rsemphore::signal()給訊號量的標記數加1

rsemphore::wait()給訊號量的標記數減1

如果wait()發現減後的標記數為負值,則wait()阻塞,直到呼叫signal()增加標記計數才返回。

(1)使用訊號量可以做為乙個直接訊號,控制不同程序之間執行的流程。

(2)訊號量也可以用來保護共享資源。

本地訊號量:

建立本地訊號量

tint createlocal(tint atokencount,townertype atype=eownerprocess);

本地訊號量沒有名字,不需要開啟,通過建立它的rsemphore,就可以簡單地訪問它。

注意,如果把atype指定為eownerthread,但又想在另外乙個執行緒中使用訊號量,那麼,就必須使用duplicate()方法,為該執行緒建立控制代碼的副本。可以檢視sdk文件中的rhandlebase::duplicate()

程序執行緒及swoole程序模型

程序和執行緒,涉及到作業系統的基本知識,但是很多人都是不懂的,因為php簡單易學,大部分人在零基礎學 php程式設計的時候都沒有去了解這些,在學習 swoole 之前必須要了解程序執行緒這樣我們才能對 swoole 的執行機制有一定的了解,更易於開發。這是阮一峰所寫的乙個解釋,寫的非常不錯。1 計算...

程序及執行緒通訊總結

上文我們介紹了如何建立乙個簡單的多執行緒程式,多執行緒之間不可避免的需要進行通訊 相比於程序間通訊來說,執行緒間通訊無疑是相對比較簡單的。首先我們來看看最簡單的方法,那就是使用全域性變數 靜態變數也可以 來進行通訊,由於屬於同乙個程序的各個執行緒是處於同乙個程序空間中的,並且它們共享這個程序的各種資...

執行緒池及程序池

1.呼叫的模組 from concurrent.futures impot 執行緒池 theadpoolexecutor 程序池 processpoolexecutor 2.例項化物件設定池大小 pool processpoolexecutor 10 引數為池大小 3.發布任務 pool.submi...