目錄
計數型訊號量
1.create
2.delete
3.wait
4.post
5.clear
6.status
7.getname
計數型訊號量通常用於多個執行緒共享使用某資源。 下圖
乙個 sylixos
計數型訊號量可以呼叫
lw_semaphorec_create
函式進行建立。
#include lw_handle lw_semaphorec_create(cpchar pcname,
ulong ulinitcounter,
ulong ulmaxcounter,
ulong uloption,
lw_object_id *pulid);
函式計數型訊號量的取值範圍為lw_semaphorec_create
原型分析:
0 <=
計數值(
ulinitcounter
)< ulmaxcounter(sylixos
支援的最大計數型訊號量值為
4294967295
)。特殊地,如果ulinitcounter
的值為
0,則可以應用於多執行緒間的同步。
乙個不再使用的計數型訊號量,可以呼叫以下函式將其刪除。刪除後的訊號量系統自動,**其占用的系統資源(試圖使用被刪除的計數型訊號量將出現未知的錯誤)。
#include ulong lw_semaphorec_delete(lw_handle *pulid);
函式執行緒如果需要等待乙個計數型訊號量,可以呼叫lw_semaphorec_delete
原型分析:
lw_semaphorec_wait 函式
需要注意的是,中斷服務程式不能呼叫 lw_semaphorec_wait
函式等待乙個計數型訊號量,因為lw_semaphorec_wait 函式在計數型訊號量值為
0(執行緒同步功能)時會阻塞當前執行緒。
#include ulong lw_semaphorec_wait(lw_handle ulid, ulong ultimeout);
ulong lw_semaphorec_trywait(lw_handle ulid);
以上兩個函式原型分析:lw_semaphorec_trywait
和 lw_semaphorec_wait
的區別在於,如果計數型訊號量當前的值為0
,lw_semaphorec_trywait
會立即退出,並返回
error_thread_wait_timeout
,而 lw_semaphorec_wait
則會阻塞直到被喚醒。
中斷服務程式
可以使用
lw_semaphorec_
trywait
函式嘗試等待計數型訊號量,lw_semaphorec_trywait 函式在計數型訊號量的值為
0 時會立即返回,不會阻塞當前執行緒。
釋放乙個計數型訊號量
可以呼叫
lw_semaphorec_
post
函式。
#include ulong lw_semaphorec_post(lw_handle ulid);
函式一次釋放多個計數型訊號量lw_semaphorec_post
原型分析:
可以呼叫
lw_semaphorec_
release
函式。
#include ulong lw_semaphorec_release(lw_handle ulid,
ulong ulreleasecounter,
ulong *pulpreviouscounter);
函式lw_semaphorec_releaselw_semaphorec_release
原型分析:
是乙個高階
api,
posix
讀寫鎖呼叫該函式來同時釋放多個讀寫執行緒。
呼叫 lw_semaphorec_clear
函式將清除計數型訊號量,這將使計數型訊號量的初始值置為 0。
#include ulong lw_semaphorec_clear(lw_handle ulid);
函式呼叫lw_semaphorec_clear
原型分析:
lw_ semaphorec_flush
函式將釋放等待在指定計數型訊號量上的所有執行緒。
#include ulong lw_semaphorec_flush(lw_handle ulid, ulong *pulthreadunblocknum);
函式以下兩個函式可以獲得指定計數型訊號量的狀態資訊。lw_semaphorec_flush
原型分析:
#include ulong lw_semaphorec_status(lw_handle ulid,
ulong *pulcounter,
ulong *puloption,
ulong *pulthreadblocknum);
ulong lw_semaphorec_statu***(lw_handle ulid,
ulong *pulcounter,
ulong *puloption,
ulong *pulthreadblocknum,
ulong *pulmaxcounter);
以上兩個函式原型分析:lw_semaphorec_getname
函式可以獲得指定計數型訊號量的名字。
#include ulong lw_semaphorec_getname(lw_handle ulid, pchar pcname);
函式lw_semaphorec_getname
原型分析:
FreeRTOS計數型值訊號量
include freertos.h include task.h include queue.h include semphr.h include os start.h define start task prio 1 define start stk size 128 taskhandle t ...
AND型訊號量
避免出現多個資源共享導致的死鎖,那麼在每個程序把需要的各種資源都得到並完成計算之後釋放,另乙個程序也在拿到需要的全部資源之後計算,這樣就不會出現交叉使用資源的情況。每個程序把需要的全部資源拿到後才會進入臨界區。那麼wait操作就需要改變 wait s1,s2,sn else s1到sn都表示所需資源...
ucos 計數訊號量
1 計數訊號量 1.1 建立訊號量 當事件控制塊os event中的oseventtype os event type sem時,則表示此處建立的事件為訊號量。上面為計數訊號量的建立函式,建立函式不能在中斷中呼叫,在全域性的事件控制塊列表中取出乙個事件控制塊pevent,對pevent進行初始化操作...