1. 程式人生 > >linux核心態和使用者態的訊號量

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