七 Linux應用程式設計和網路程式設計之執行緒

2021-09-23 17:21:04 字數 1988 閱讀 7884

目錄

1、程序和執行緒

2、執行緒

3、執行緒同步之訊號量

4、執行緒同步之互斥鎖

5、執行緒同步之條件變數

1.1、使用程序技術的優勢和劣勢

優勢:劣勢:

程序與程序之間天生是隔離的,好處是安全,壞處是程序間通訊很麻煩

1.2、執行緒技術

(1)執行緒技術保留了程序技術實現多工的特性。

(3)多執行緒在多核心cpu上面更有優勢。

(1)一種輕量級程序

(2)執行緒是參與核心排程的最小單元

(3)乙個程序中可以有多個執行緒

2.1執行緒技術的優勢

(1)像程序一樣可被os排程

(2)同一程序的多個執行緒之間很容易高效率通訊

(3)在多核心cpu(對稱多處理器架構smp)架構下效率最大化

多核cpu不能保證多個程序在多個cpu核心上同時執行,但多執行緒可以保證在多個核心上排程

2.2、執行緒常見函式

(1)執行緒建立與**:

(2)執行緒取消:

(3)執行緒函式退出相關:

(4)獲取執行緒id:

任務:使用者從終端輸入任意字元然後統計個數顯示,輸入end則結束

#include #include #include #include #include #include char buf[200];

sem_t sem;

unsigned int flag = 0;

void *func(void *arg);

int main(void)

printf("請輸入乙個字串,以回車結尾:\n");

while (scanf("%s", buf))

//主線程在收到使用者輸入的字串,並且確認不是end後,就去發訊號啟用子執行緒來計數。

sem_post(&sem); }

// **子程序

ret = pthread_join(th, null);

if (ret != 0)

printf("子執行緒**成功\n");

sem_destroy(&sem);

return 0;

}// 子執行緒

void *func(void *arg)

}

(1)什麼是互斥鎖

(2)互斥鎖和訊號量的關係:可以認為互斥鎖是一種特殊的訊號量

(3)互斥鎖主要用來實現關鍵段**保護

(4)互斥鎖可以實現上節**的功能,通過上鎖和解鎖以及sleep()實現,但並非互斥鎖的標準用法,**效率很低

相關函式

pthread_cond_init pthread_cond_destroy

pthread_cond_wait pthread_cond_signal/pthread_cond_broadcast

**實踐(條件變數和互斥鎖需要共同使用,子執行緒裡的互斥鎖也是有意義的)

#include #include #include #include char buf[200];

pthread_mutex_t mutex;

pthread_cond_t cond;

unsigned int flag = 0;

void *func(void *arg);

int main(void)

printf("請輸入乙個字串,以回車結尾:\n");

while (1)

}// **子程序

ret = pthread_join(th, null);

if (ret != 0)

printf("子執行緒**成功\n");

pthread_mutex_destroy(&mutex);

pthread_cond_destroy(&cond);

return 0;

}// 子執行緒

void *func(void *arg)

}

Linux串列埠應用程式設計

常見的資料通訊的基本方式可分為並行通訊與序列通訊兩種。1.並行通訊是指利用多條資料傳輸線將乙個字資料的各位元位同時傳送。它的特點是傳輸速度快,適用於傳輸距離短且傳輸速度較高的通訊。2.序列通訊是指利用一條傳輸線將資料以位元位為單位順序傳送。特點是通訊 線路簡單,利用簡單的線纜就可實現通訊,降低成本,...

Linux應用程式設計 mmap

二話不說,上來就問下那個man name mmap,munmap map or unmap files or devices into memory synopsis include void mmap void addr,size t length,int prot,int flags,int f...

linux應用程式設計和網路程式設計擴充套件 守護程序

守護程序 1 daemon,表示守護程序,簡稱為d 程序名後面帶d的基本就是守護程序 2 長期執行 一般是開機執行直到關機時關閉 3 與控制台脫離 普通程序都和執行該程序的控制台相繫結,表現為如果終端被強制關閉了則這個終端中執行的所有程序都被會關閉,背後的問題還在於會話 4 伺服器 server 伺...