linux多執行緒之posix訊號量

2021-08-19 22:15:20 字數 1303 閱讀 5593

1.在多工作業系統中,通常資源都是固定數量可用的,比如印表機這個外設;但是需要使用該資源的任務有很多,這時就可以使用到訊號量來協調資源的使用了(當然在資源內部用鎖也可以達到同樣的效果);

2. 訊號量有被作業系統實現為pv操作:p(passeren),消耗資源,對訊號量做減一操作;v(vrijgeven),釋放資源,對訊號量做加一操作;pv操作都是原子操作;

3. 當任務a需要做p操作,但是訊號量為0時,則任務a阻塞,直到由其他任務做了v操作產生可用資源;

#include #include #include #include #include #include #include #include #include #include /* for o_* constants */

#include /* for mode constants */

#include #define dbg_print(fmt, args...)

/** * [msdelay_select 用select()實現的ms級別執行緒休眠]

*@param mstime [休眠執行緒mstime時間,單位毫秒]

*/void msdelay_select(unsigned mstime)

if(mstime>=1000)

else

select(0, null, null, null, &time);

}static sem_t semid;

static

char teststr[1024];

void* testthead(void* arg)

/*** fgets會將stdin中的換行符也寫入teststr中,所以列印時不需要再換行;

* 如果要讀的資料比較長,已經超過fgets()第二個引數設定值,才可能沒有換行符;

*/dbg_print("the teststr is:%s", teststr);

msdelay_select(100);

}}int main(int argc, const

char* argv)

/*** 建立測試用執行緒testthead

*/ret = pthread_create(&threadid, null, testthead, null);

if(ret != 0)

while(1)

break;

}/**

* 將訊號量做加1的原子操作;

*/ret = sem_post(&semid);

if(ret != 0)

}return

0;}

POSIX執行緒多執行緒例子

include include include include define num threads 6 void thread function void arg int main sleep 1 printf waiting for threads to finish.n for lots of...

Linux多執行緒之執行緒建立

1.函式 include intpthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 引數 thread 為執行緒id...

Linux多執行緒之執行緒終止

呼叫 return void var 呼叫void pthread exit void value ptr 其它執行緒可以呼叫 pthread join 獲得這個針。注 如果 thread 執行緒通過 return 返回,value ptr 所指向的單元裡存放的是 thread 執行緒函式的返回值。...