0825 0826 訊號量與多執行緒

2021-06-25 18:09:34 字數 1428 閱讀 5985

1.  訊號量 

kill  -l 

13號訊號量 (pipe  沒有讀了,還去寫,缺省會退出) 

17號訊號量 (child 退出時傳送 17 號訊號量  )

程序接收到訊號以後,可以有如下3

種選擇進行處理:

1. 預設處理 signal(sigint,sig_d

fl);2.忽略訊號 signal(sigint,sig_ign); 

3.呼叫函式 signal(sigint,fun ) 

sigint 是2號函式 ,這裡signal 可以換別的訊號,自己填'

sigkill sigstop 這2個訊號是 不能被忽略的

2. 多執行緒 

pthread_create() 

建立執行緒

pthread_join() 

**對應的執行緒,放main裡,在子執行緒退出後,**子執行緒資源

pthread_exit() 

子執行緒退出,用 exit()的話會程序退出

pthread_mutex_init 

初始化鎖

pthread_mutex_lock 

關鎖 pthread_mutex_unlock() 

解鎖 pthread_mutex_destory 

銷毀鎖,放main()中,程序結束時不需要鎖後,進行銷毀

pthread_self( ) 

讀執行緒id 

pthread_detach( ) 

**資源(系統**) ,放自己執行緒裡

條件變數:

pthread_cond_wait() 

放入阻塞佇列,等待被叫醒

pthread_cond_signal() 

阻塞佇列有人,則叫醒第乙個

pthread_cond_broadcast() 

叫醒阻塞佇列裡的所有人

pthread_cond_init() 

條件變數初始化,一般在main()中初始

pthread_cond_destory() 

銷毀條件變數,一般在main()中銷毀

任務1: 建立執行緒,實現多視窗賣票;

任務2: 客戶端,伺服器, 客戶端放送資訊給伺服器,客戶端的資訊由 伺服器中的執行緒進行處理,處理完後返回給客戶端;

伺服器一條總管道,這條管道只接收客戶端的上線資訊;

客戶端的傳送資訊,接收資訊管道均由客戶端建立,注意建立管道要放前面。(當在管道建立之前去開啟管道的話open()函式會返回-1 )

伺服器運用select()函式輪詢 訊號,與伺服器建立聯絡的客戶端連線成乙個鍊錶,並將客戶端相應的描述符加入select 中,當客戶端退出時刪除鍊錶中的結點,並且將select中的描述符刪除;

伺服器接收到的資訊任務放在乙個訊息佇列中,子執行緒互斥的從佇列中取任務處理,返回給客戶端。

任務2詳情見 0826**;

多執行緒 訊號量

訊號量 semaphore類 建立帶指定許可數的訊號量 semaphore semaphore new semaphore 1 建立乙個許可的訊號量 訊號量用來限制訪問共享數資源的執行緒數。在訪問資源之前,執行緒必須從訊號量獲取許可,在訪問完資源後釋放訊號量。任務通過呼叫訊號量的acquire 方法...

多執行緒通訊 訊號量

當當前資源的數量大於0的時候,等待訊號量的執行緒可以獲得乙個資源並繼續執行,訊號量的當前資源數量將減1,如果當前資源的數量為0,則等待訊號量的執行緒將處於等待狀態,直到有執行緒釋放訊號量,使訊號量標識的資源數量大於0 handle createsemaphore lpsecurity attribu...

多執行緒之訊號量

本文的訊號量型別為posix無名訊號量 1 訊號量基礎知識 2 訊號量的主要用到的函式 int sem init sem t sem,int pshared,unsigned int value int sem destroy sem t sem int sem wait sem t sem int...