包含所有的系統資料結構,服務原型等。
#include
"tx_api.h"
定義棧大小、位元組池容量、塊容量、佇列數量
#define demo_stack_size 1024
#define demo_byte_pool_size 9120
#define demo_block_pool_size 100
#define demo_queue_size 100
定義了執行緒、訊息佇列、訊號量、互斥量、事件標誌組、位元組池、塊池、堆疊空間等
/* 執行緒 */
tx_thread thread_0;
tx_thread thread_1;
tx_thread thread_2;
tx_thread thread_3;
tx_thread thread_4;
tx_thread thread_5;
tx_thread thread_6;
tx_thread thread_7;
/* 訊息佇列 */
tx_queue queue_0;
/* 訊號量 */
tx_semaphore semaphore_0;
/* 互斥量 */
tx_mutex mutex_0;
/* 事件標誌組 */
tx_event_flags_group event_flags_0;
/* 位元組池 */
tx_byte_pool byte_pool_0;
/* 塊池 */
tx_block_pool block_pool_0;
/* 堆疊空間 */
uchar memory_area[demo_byte_pool_size]
;
ulong thread_0_counter;
ulong thread_1_counter;
ulong thread_1_messages_sent;
ulong thread_2_counter;
ulong thread_2_messages_received;
ulong thread_3_counter;
ulong thread_4_counter;
ulong thread_5_counter;
ulong thread_6_counter;
ulong thread_7_counter;
宣告執行緒入口函式
void
thread_0_entry
(ulong thread_input)
;void
thread_1_entry
(ulong thread_input)
;void
thread_2_entry
(ulong thread_input)
;void
thread_3_and_4_entry
(ulong thread_input)
;void
thread_5_entry
(ulong thread_input)
;void
thread_6_and_7_entry
(ulong thread_input)
;
所有功能初始化後,才可以進入 main 函式。
主函式僅僅呼叫 tx_kernel_enter。
/* 定義主函式入口 */
intmain()
/* 具有錯誤檢測的服務 */
#define tx_kernel_enter _tx_initialize_kernel_enter
void _tx_initialize_kernel_enter
(void)
_tx_thread_system_state = tx_initialize_in_progress;
/* 呼叫應用初始化程式,參量為第乙個可用記憶體位址 */
(_tx_initialize_unused_memory)
;/* 設定系統狀態,準備進入執行緒排程 */
_tx_thread_system_state = tx_initialize_is_finished;
/* 開始排程執行緒 */
_tx_thread_schedule()
;}
在主程式中由tx_kernel_enter呼叫。
思路:定義一塊大空間的陣列作為堆疊空間,用以分配給於位元組池;
從位元組池中取出pointer指標位址以及池容量,分配給予執行緒、訊息佇列、塊池;
訊號量、互斥量、事件標誌無需位元組池分配空間;
當所有消費者獲取過位元組池後,位元組池統計剩餘空間,並進行釋放。
void
(void
*first_unused_memory)
建立執行緒0
void
thread_0_entry
(ulong thread_input)
}
建立執行緒1:與執行緒2共享訊息佇列(作為傳送)
void
thread_1_entry
(ulong thread_input)
}
建立執行緒2:與執行緒1共享訊息佇列(作為接收)
void
thread_2_entry
(ulong thread_input)
}
建立執行緒3和4:通過入參選擇執行具體函式,獲取不到訊號量的執行緒會一直等待,直到另乙個執行緒釋放訊號量。
void
thread_3_and_4_entry
(ulong thread_input)
}
建立執行緒5
void
thread_5_entry
(ulong thread_input)
}
建立執行緒6和7
void
thread_6_and_7_entry
(ulong thread_input)
}
Spring原始碼學習(一)
人對神秘的東西即好奇又恐懼,好奇心使人想一 竟恐懼心又使人望而卻步,工作了那麼久對spring原始碼一直懷有這樣的心態,從來沒有下決心進行研讀,最近感覺壓力在攀公升,使自己不得不戰勝恐懼心,進行更深入的學習,希望自己的學習同樣也能給你小夥伴們帶來一絲靈感。接下來將更加一下小例子來跟讀一下原始碼的實現...
tensorflow 原始碼學習 一
作為主流的機器學習框架,tensorflow的提供的介面變化很多,專案 也比較複雜,為了讓自己使用起來更得心應手,所以覺得還是有必要學習一下原始碼。個人覺得提公升程式設計水平的兩種最好方式,乙個是自己造輪子,再乙個就是閱讀原始碼。1.版本 2.整體專案結構 這並不是tensorflow完整的專案結構...
ZedGraph原始碼學習(一)
因工作原因,學習相關zedgraph原始碼來解決一些問題。剛看到這個開源圖表控制項時,感覺還是短小精悍的。結合zedgraph控制項的例子大致看了下對應的原始碼,寫下點感悟。這裡先大致說一些zedgraph裡的元素。1.panel zedgraph控制項是如何畫出來的,就是這這個上面畫出來,後面的元...