#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...