日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux線程間通信機制研究(linux線程通信)

linux系統(tǒng)的開發(fā)者和系統(tǒng)管理者需要知道如何在線程之間正確地交換數(shù)據(jù),因此Linux系統(tǒng)提供了許多不同的線程間通信機制來實現(xiàn)這一目的。本文就Linux環(huán)境中的一些線程間通信機制進行一番探討。

Linux線程間通信機制主要包括信號,全局變量,文件映射,套接字,消息隊列等。

首先是信號,Linux系統(tǒng)可以將信號傳送給人,互斥和同步問題由接收者決定,接收者可以采取相應措施進行處理。信號是最輕量級的,該機制適合處理簡單的通信,例如:

// 向子線程發(fā)送SIGUSR1信號

pthread_t tid;

// … 創(chuàng)建子線程

kill(tid, SIGUSR1);

全局變量是Linux中一種經(jīng)典的線程間通信方式,多個線程可以訪問同一個全局變量,但是它不能解決多線程同步的問題,并不能保證同一時刻只能有一個線程操作全局變量,使用全局變量時要注意此問題。全局變量的例子:

int g_iCount = 0;

void *thread_func(void *ptr)

{

g_iCount++;

printf(“count = %d\n”, g_iCount);

return NULL;

}

文件映射是一種可以允許多個進程共享同一個文件的用戶級IPC機制,可以將一段物理地址映射到用戶空間,進程可以訪問該物理地址,獲取文件中存儲的數(shù)據(jù),也可以將用戶修改的數(shù)據(jù)寫入文件,各個進程間只要完成同一個文件的映射就可以互相訪問和通信。比如:

int fd;

char *pAddr;

// … 打開文件等

fd = open(…);

// 建立映射區(qū)

pAddr = mmap(…);

// 共享文件資源

// .. 修改或讀取文件

// 釋放映射區(qū)

munmap(…);

消息隊列是指系統(tǒng)提供的消息傳遞機制,最重要的優(yōu)點是可以實現(xiàn)異步數(shù)據(jù)交換,首先需要定義一個消息隊列,每一個消息隊列可以接收的消息總數(shù)有限,發(fā)送進程把消息發(fā)送到消息隊列,無論接收進程此時是否在線,消息隊列能夠存放消息,而且可以把一個消息發(fā)送給多個進程,消息隊列可以利用頭文件sys/msg.h,它包含標準Linux C函數(shù)msgget,msgctl,msgrcv和msgsnd等函數(shù)。如下:

#include

#include

#include

// 獲取消息隊列ID

int msqid=msgget(MSGKEY, PERMS);

// 發(fā)送消息給消息隊列

msgsnd(msqid, &msg, sizeof(msgbuf.mtext));

// 接收消息

msgrcv(msqid, &msg, sizeof(msgbuf.mtext), 0, 0);

最后要講的是套接字,他是網(wǎng)絡編程的一部分,是兩個進程之間交換數(shù)據(jù)的接口,類似管道或FIFO。一個進程可以創(chuàng)建套接字來接收數(shù)據(jù),另一個進程可以通過這個套接字發(fā)送數(shù)據(jù),例如通過使用頭文件,就可以實現(xiàn)套接字編程,調(diào)用socket函數(shù)來生成一個服務器端的套接字:

// 創(chuàng)建一個套接字

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

struct sockaddr_in cliaddr;

// 設置要連接的服務器地址

cliaddr.sin_family = AF_INET;

cliaddr.sin_port = htons(PORT);

// 執(zhí)行連接

connect(sockfd, (struct sockaddr *)&cliaddr, sizeof(

成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)——四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,高電服務器托管,算力服務器租用,可選線路電信、移動、聯(lián)通機房等。


分享題目:Linux線程間通信機制研究(linux線程通信)
轉(zhuǎn)載注明:http://www.5511xx.com/article/copiogo.html