[英]Create thread safe global store in C
我正在寫一個在FreeRTOS上運行的應用程序,其中我有不同的線程,所有線程都必須訪問(讀和寫)相同的數據結構。 因此,我認為我可以實現一個全局數據存儲,以某些分組的結構保存所有數據。 我還考慮過使用SQLite之類的東西,但是我認為這對我的應用程序來說是一個過大的殺傷力。
盡管如此,仍有一些懸而未決的問題
global store
更好的方式來global store
? Google沒有給出太多提示。 讓我與您分享處理這種情況的最常見的C方法。
為了避免公開大量全局數據,請使用opaque pointer
s,並使用以opaque指針作為參數的API列表。 這樣,您可以擁有一組干凈的API來訪問所有結構,而將實現細節保留在.c文件中。 使用不透明指針 s的好處是,除了將不透明指針作為參數的API之外,沒人知道如何處理指向數據的類型。 這為您的結構提供了保護和封裝,以便您使用提供的API對其進行訪問或更改。
在由不透明指針標識的每個結構定義中,都有一個mutex
( FreeRTOS具有在信號量的術語中實現的互斥鎖 )以線程安全的方式訪問結構成員。 創建互斥鎖時,必須使用xSemaphoreCreateMutex
。 當您要訪問可能由多個任務訪問的成員數據時,在所有API中都使用xSemaphoreGive
和xSemaphoreTake
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.