socket多執行緒通訊

2021-09-29 06:31:15 字數 2080 閱讀 9010

程序與執行緒的區別:

程序:在作業系統構成單獨執行流的單位。

執行緒:在程序構成單獨執行流的單位

執行緒的建立和執行流程

#include

int pthread_create(pthread_t * restrict thread,const pthread_attr_t * restrict attr,

void * (* start_routine)(void *),void * restrict arg); 成功時返回0,失敗時返回其他值

引數:thread 儲存新建立執行緒id的變數位址值。執行緒與程序相同,也需要用於區分不同執行緒的id。

attr 用於傳遞執行緒屬性的引數,傳遞null時,建立預設的執行緒。

start_routine 相當於執行緒main函式的、在單獨執行流中執行的函式位址值(函式指標)。

argue 通過第三個引數傳遞呼叫函式時包含傳遞引數資訊的變數位址值

控制線程的執行流

#include

int pthread_join(pthread_t thread,void ** status); 成功時返回0,失敗時返回其他值。

引數:thread 該引數id的執行緒終止後才會從該函式返回。

statues 儲存執行緒的main函式返回值的指標變數位址值。

執行緒同步

互斥量的建立和銷毀函式

#include

int pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t * attr);

int pthread_mutex_destroy(pthread_mutex_t * mutex); 成功時返回0,失敗時返回其他值

引數:mutex 建立互斥量時傳遞儲存互斥量的變數位址值,銷毀時傳遞需要銷毀的互斥量位址值

attr 傳遞即將建立的互斥量屬性,沒有特別需要指定的屬性時傳遞null。

鎖住或釋放臨界區的函式

#include

int pthread_mutex_lock(pthread_mutex_t * mutex);

int pthread_mutex_unlock(pthread_mutex_t * mutex); 成功時返回0,失敗時返回其他值。

臨界區的大小會影響程式的執行時間。

訊號量

#include

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

int sem_destroy(sem_t * sem); 成功時返回0,失敗時返回其他值。

引數:sem 建立訊號量時傳遞儲存訊號量的變數位址值,銷毀時傳遞需要銷毀的訊號量變數位址值。

pshared 傳遞其他值時,建立可由多個程序共享的訊號量;傳遞0時,建立只允許1個程序內部使用的訊號量。我們需要完成同一程序內的執行緒同步,故傳遞0.

value 制定新建立的訊號量初始值。

相當於互斥量的lock,unlock函式

#include

int sem_post(sem_t * sem);

int sem_wait(sem_t * sem); 成功時返回0,失敗時返回其他值。

引數: sem 傳遞儲存訊號量讀取值的變數位址值,傳遞給sem_post時訊號量增1,傳遞給

sem_wait時訊號量減1.

執行緒的銷毀的方法

#include

int pthread_detach(pthread_t thread); 成功時返回,失敗時返回其他值。

引數: thread 終止的同時需要銷毀的執行緒id。

臨界區定義:函式內同時執行多個執行緒時引起問題的多條語句構成的**塊。

windows下的

再次進入non-signaled狀態的核心物件成為「auto-reset模式」的核心物件,而不會自動跳轉到non-signaled狀態的核心物件稱為「manual-reset模式」的核心物件。

多執行緒socket通訊client

控制台下實現多執行緒socket通訊,服務端為每個請求的客戶端建立乙個執行緒,進行通訊。其實這些msdn裡都有 一.基本流程如下 定義變數 獲得winsock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放資源 二.客戶端 建立過程 下篇是服...

vc 多執行緒程式設計 SOCKET通訊

vc 多執行緒程式設計 socket通訊 include stdafx.h include 伺服器端程式 dword winapi answerthread lpvoid lparam int main sockaddr in service service.sin family af inet s...

基於TCP的Socket通訊 多執行緒

中引用的頭函式 include include include pragma comment lib,ws2 32.lib 伺服器端 1.初始化socket環境,建立套接字 wsadata wsadata word wversionrequested makeword 2,2 將兩個byte型合成乙...