linux核心態和使用者態的訊號量
在Linux的核心態和使用者態都有訊號量,使用也不同,簡單記錄一下。
1> 核心訊號量,由核心控制路徑使用。 核心訊號量是struct semaphore型別的物件,它在<asm/semaphore.h>中定義
struct semaphore {
atomic_t count;
int sleepers;
wait_queue_head_t wait; } 核心訊號量的相關函式 初始化:
void sema_init (struct semaphore *sem, int val); 申請核心訊號量所保護的資源:
void down(struct semaphore * sem); // 可引起睡眠 釋放核心訊號量所保護的資源:
void up(struct semaphore * sem);
2> 使用者態訊號量分為兩種,一種為POSIX,另一種為 SYSTEM V
POSIX訊號量的引用標頭檔案是<semaphore.h>,而SYSTEM V訊號量的引用標頭檔案是 <sys/sem.h>
從使用的角度,System V訊號量是複雜的,而Posix訊號量是簡單。比如,POSIX訊號量的建立和初始化或PV操作就很非常方便。
這裡只是簡單列舉POSIX訊號量
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t *sem); // 這是一個阻塞的函式,訊號量減1
int sem_post(sem_t *sem); //把指定的訊號量sem的值加1; 呼醒正在等待該訊號量的任意執行緒。
以上內容均摘錄部落格:
inux 核心訊號量使用者態訊號量 詳解 https://blog.csdn.net/weed_hz/article/details/8965733?utm_source=blogxgwz1
相關文章:
Linux使用者態的訊號量 https://blog.csdn.net/zhang_shuai_2011/article/details/7653750
linux核心態和使用者態之間相互通訊 https://www.cnblogs.com/charlesblc/p/6261918.html