什么是阻塞和非阻塞?我們就用管道的讀寫來舉例子。
如果沒聽過管道,就把他理解成文件就行。
一個程序打開管道,并且往管道里面寫入數(shù)據(jù);
intmain() { intfd=open("fifo",O_WRONLY); if (-1 == fd) { perror("open"); } char buf[32] = {0}; scanf("%s", buf); if (write(fd, buf, strlen(buf)) == -1) { perror("write"); } return 0; }另一個程序打開管道,從管道里面讀取數(shù)據(jù)。
int main() { intfd=open("fifo",O_RDONLY); if (-1 == fd) { perror("open"); } charbuf[32]={0}; if (read(fd, buf, sizeof(buf)) == -1) { perror("write"); } return 0; }默認(rèn)情況下,用open打開管道是阻塞的模式,也就是說,如果管道沒有數(shù)據(jù),程序一直停在 read 函數(shù)這里,直到管道里面有數(shù)據(jù),把它讀出來。
創(chuàng)建一個管道,運(yùn)行程序,現(xiàn)象就是這樣的,程序此時阻塞在 read 函數(shù)。
如果通過寫進(jìn)程往管道里面寫入數(shù)據(jù),read能立馬把數(shù)據(jù)讀出來。
open函數(shù)還給我們提供了非阻塞的模式,加上這個選項,運(yùn)行程序的時候,即使管道里面沒有數(shù)據(jù),程序也不會停在 read 函數(shù)上,繼續(xù)向下執(zhí)行。
這兩個現(xiàn)象,就是阻塞和非阻塞。
最后,放上百科的一段解釋,大家還有什么見解,歡迎在評論區(qū)交流。
阻塞和非阻塞指的是調(diào)用者(程序)在等待返回結(jié)果(或輸入)時的狀態(tài)。 阻塞時,在調(diào)用結(jié)果返回前,當(dāng)前線程會被掛起,并在得到結(jié)果之后返回。 非阻塞時,如果不能立刻得到結(jié)果,則該調(diào)用者不會阻塞當(dāng)前線程。 因此對應(yīng)非阻塞的情況,調(diào)用者需要定時輪詢查看處理狀態(tài)。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
阻塞
+關(guān)注
關(guān)注
0文章
24瀏覽量
8244
原文標(biāo)題:什么是阻塞和非阻塞
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
Verilog語言中阻塞和非阻塞賦值的不同
來源:《Verilog數(shù)字系統(tǒng)設(shè)計(夏宇聞)》 阻塞和非阻塞賦值的語言結(jié)構(gòu)是Verilog 語言中最難理解概念之一。甚至有些很有經(jīng)驗的Verilog 設(shè)計工程師也不能完全正確地理解:何時使用非
Verilog阻塞和非阻塞原理分析
Verilog阻塞和非阻塞原理分析在Verilog語言最難弄明白的結(jié)構(gòu)中“非阻塞賦值”要算一個。甚至是一些很有經(jīng)驗的工程師也不完全明白“
發(fā)表于 11-23 12:02
【分享】Verilog中阻塞與非阻塞語句
同了在第一個clk上升沿到來時,由于b的值未知,賦給c之后,c也為未知值;緊接著,把a(bǔ)的值給b,由于a的值已經(jīng)給出,所以,結(jié)束之后,a、b的值相同,c為x。綜合之后,生成兩級移位寄存器。 關(guān)于非阻塞
發(fā)表于 11-03 20:26
阻塞與非阻塞賦值的區(qū)別是什么?
本文通過Verilog事件處理機(jī)制,詳細(xì)討論了阻塞與非阻塞賦值的區(qū)別、聯(lián)系及其應(yīng)用示例。
發(fā)表于 05-10 06:59
深入分析verilog阻塞和非阻塞賦值
學(xué)verilog 一個月了,在開發(fā)板上面寫了很多代碼,但是始終對一些問題理解的不夠透徹,這里我們來寫幾個例子仿真出阻塞和非阻塞的區(qū)別
發(fā)表于 02-11 03:23
?1542次閱讀
《Linux設(shè)備驅(qū)動開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動中的阻塞與非阻塞IO
《Linux設(shè)備驅(qū)動開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動中的阻塞與非阻塞IO
發(fā)表于 10-27 11:35
?9次下載

從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型
這里探討的服務(wù)器模型主要指的是服務(wù)器端對I/O的處理模型。從不同維度可以有不同的分類,這里從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型。
FPGA的視頻教程之Verilog中阻塞與非阻塞的詳細(xì)資料說明
本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA的視頻教程之Verilog中阻塞與非阻塞的詳細(xì)資料說明。
發(fā)表于 03-26 17:16
?2次下載

時序邏輯中的阻塞和非阻塞
Verilog HDL的賦值語句分為阻塞賦值和非阻塞賦值兩種。阻塞賦值是指在當(dāng)前賦值完成前阻塞其他類型的賦值任務(wù),
阻塞與非阻塞通信的區(qū)別 阻塞和非阻塞應(yīng)用場景
阻塞通信(Blocking Communication):當(dāng)進(jìn)行阻塞通信時,調(diào)用者在發(fā)起一個I/O操作后會被阻塞,直到該操作完成返回才能繼續(xù)執(zhí)行后續(xù)代碼。
網(wǎng)絡(luò)IO模型:阻塞與非阻塞
阻塞 IO 模型 在Linux ,默認(rèn)情況下所有的 socket 都是阻塞的,一個典型的讀操作流程如圖所示。 阻塞和非阻塞的概念描述的是用戶

socket編程中的阻塞與非阻塞
在網(wǎng)絡(luò)編程中, socket 是一個非常重要的概念,它提供了一個抽象層,使得開發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。 socket 編程中的阻塞與非阻塞模式是兩種不同的操作方式,它們對程序的響應(yīng)性
評論