在程序間通訊時,對於訊息的通訊,有時候回用到訊號量,本次就實現乙個case,簡單介紹訊號量如何在程序之間實現訊息收發的同步。
首先,了解一下訊號量的定義,及介面類
class interprocess_semaphore
;
其次,構造乙個訊息的結構體
struct my_shared_memory_buffer
boost::interprocess::interprocess_semaphore mutex;
boost::interprocess::interprocess_semaphore empty;
boost::interprocess::interprocess_semaphore store;
int itemdata;
};
3. 建立乙個程序a,這裡只寫了函式的形式,具體介面自己實現
void sharedmemory_semaphore_a()
~shm_remove()
}remover;
(void)remover;
shared_memory_object shm(create_only, "mysharedmemory", read_write);
shm.truncate(sizeof(my_shared_memory_buffer));
void *addr = region.get_address();
my_shared_memory_buffer *data = new(addr)my_shared_memory_buffer;
const int number = 10;
for (int i = 0; i < number; i++)
}
4. 建立程序b
void sharedmemory_semaphore_b()
}remover;
(void)remover;
shared_memory_object shm(open_only, "mysharedmemory", read_write);
void *addr = region.get_address();
my_shared_memory_buffer *data = static_cast(addr);
const int number = 10;
int get_data;
(void)get_data;
while(true)
}
5. 啟動測試
注意: 用的時候,一定注意不要死鎖,訊號量的處理一定要小心。
C 訊號量使用示例
using system using system.collections.generic using system.linq using system.text using system.threading author kagula date 2015 6 16 environment vs20...
訊號量 二值訊號量
訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...
python訊號量 Python訊號量
python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...