程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第一百一十三回:C語言實例--線程同步之信號量一)

一起talk C栗子吧(第一百一十三回:C語言實例--線程同步之信號量一)

編輯:關於C語言

一起talk C栗子吧(第一百一十三回:C語言實例--線程同步之信號量一)



各位看官們,大家好,上一回中咱們說的是線程同步概述的例子,這一回咱們說的例子是:線程同步之信號量。閒話休提,言歸正轉。讓我們一起talk C栗子吧!

看官們, 今天我們將介紹使用信號量進行線程同步。信號量的核心操作是P/V操作,我們可以使用相關的函數來進程P/V操作。接下來我們介紹與信號量相關的函數。

sem_init函數

int sem_init(sem_t *sem, int pshared, unsigned int value);

該函數用來初始化信號量。該函數有三個參數,接下來我們分別介紹它們的作用。

第一個參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是將要被函數初始化的信號量; 第二個參數是一個int類型的變量,該變量表示信號量的使用范圍; 第三個參數是一個int類型的變量,函數將使用該變量的值來初始化信號量; 函數運行成功時返回0,否則返回-1;

在使用該函數時,第二個參數通常設置為0,表示該信號量只可以在當前的進程內使用,不能在不同進程的線程之間使用;如果設置為非零值,那麼就可以在不同進程之間使用信號量了。

sem_destroy函數

int sem_destroy(sem_t *sem);

該函數用來釋放信號量相關的資源。該函數只有一個參數。

參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;

sem_wait函數

int sem_wait(sem_t *sem);

該函數實現P操作,當信號量大於1時,減去1。如果信號量為0,那麼掛起當前線程;

該函數只有一個參數。 參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;

sem_post函數

int sem_post(sem_t *sem);

該函數實現V操作,當信號量為0時,加上1。如果有線程在等待信號量,那麼喚醒該線程;

該函數只有一個參數。 參數是sem_t類型的指針,該指針指向一個信號量,該信號量就是被sem_init函數初始化的信號量; 函數運行成功時返回0,否則返回-1;

各位看官,關於線程同步之信號量的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved