各位看官們,大家好,上一回中咱們說的是線程同步概述的例子,這一回咱們說的例子是:線程同步之信號量。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們, 今天我們將介紹使用信號量進行線程同步。信號量的核心操作是P/V操作,我們可以使用相關的函數來進程P/V操作。接下來我們介紹與信號量相關的函數。
int sem_init(sem_t *sem, int pshared, unsigned int value);
該函數用來初始化信號量。該函數有三個參數,接下來我們分別介紹它們的作用。
第一個參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是將要被函數初始化的信號量; 第二個參數是一個int類型的變量,該變量表示信號量的使用范圍; 第三個參數是一個int類型的變量,函數將使用該變量的值來初始化信號量; 函數運行成功時返回0,否則返回-1;在使用該函數時,第二個參數通常設置為0,表示該信號量只可以在當前的進程內使用,不能在不同進程的線程之間使用;如果設置為非零值,那麼就可以在不同進程之間使用信號量了。
int sem_destroy(sem_t *sem);
該函數用來釋放信號量相關的資源。該函數只有一個參數。
參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;int sem_wait(sem_t *sem);
該函數實現P操作,當信號量大於1時,減去1。如果信號量為0,那麼掛起當前線程;
該函數只有一個參數。 參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;int sem_post(sem_t *sem);
該函數實現V操作,當信號量為0時,加上1。如果有線程在等待信號量,那麼喚醒該線程;
該函數只有一個參數。 參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;各位看官,關於線程同步之信號量的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。