C C 使用訊號量控制線程執行順序

2021-10-24 09:49:40 字數 1750 閱讀 7826

#include

#include

// semaphore/seməfɔːr/

#include

//訊號量的主要函式有:

/* * 函式名:sem_init()

* 功能:對指定訊號初始化

* 引數1:*sem:訊號,

* 引數2:pshared=0時,訊號在當前程序的多個執行緒之間共享

* 引數3:unsigned

* 引數4:value表示初始化訊號的值

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

*//*

* 函式名:sem_wait()

* 功能:阻塞當前程序,直到訊號量的值大於0,解除阻塞,

* 解除阻塞後sem的值-1表示公共資源執行減少了,例

* 如:如果你對乙個值為2的訊號量呼叫sem_wait(),

* 執行緒將會繼續執行,訊號量的值將-1。當初始化

* value=0後,使用sem_wai會阻塞這個執行緒,這個

* 執行緒函式就會等待其它執行緒函式呼叫sem_post增加

* 了了這個值使它不再是0,才開始執行,然後value值-1。

* 引數:*sem

* int sem_wait(sem_t *sem);

*//*

* 函式名:sem_post(sem_t *sem);

* 功能:增加訊號量的值+1,當有執行緒阻塞在這個訊號量上時,

* 呼叫這個函式會使其中的乙個執行緒不再阻塞,選擇機制

* 由執行緒的排程策略決定

* 引數:*sem

* int sem_post(sem_t *sem);

*/sem_t sem,sem1,sem2;

void

*thread_a

(void

* arg)

void

*thread_b

(void

* arg)

void

*thread_c

(void

* arg)

intmain

(void

)

iotek@iotekclass:

~/pwz1903c++

/depa/面試題/方凌計算機$ gcc test4.c -pthread

iotek@iotekclass:

~/pwz1903c++

/depa/面試題/方凌計算機$ .

/a.out

thread_b running

thread_c running

thread_a running

thread_b running

thread_c running

thread_a running

thread_b running

thread_c running

thread_a running

thread_b running

thread_c running

thread_a running

thread_b running

thread_c running

thread_a running

thread_b running

解釋來自

控制線程的執行順序

在此之前實現了兩個執行緒的交替執行,那麼也該來研究一下如何控制線程的執行順序。此筆記只有部分實現。1,使用join 簡單易操作,此方法有個缺陷就是 呼叫程式寫起來有點冗長,如果有n個執行緒,那麼main 就會非常長,而且有些許重複 program description 控制線程的執行順序 1,其餘...

C 使用Semaphore(訊號量)控制多執行緒

在c net中,當需要動態控制線程的數量時,我們可以使用semaphore來控制最大執行緒數。class program thread sleep 1000 console writeline main方法結束 授予5個請求 semaphore release 5 console readline ...

如何控制線程執行的順序?

public class myservice for int i 0 i 2 i ordernum 2 notifyall catch interruptedexception e public synchronized void methodb for int i 0 i 2 i ordernum...