什么是阻塞和非阻塞?我们就用管道的读写来举例子。
如果没听过管道,就把他理解成文件就行。
一个程序打开管道,并且往管道里面写入数据;
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; }另一个程序打开管道,从管道里面读取数据。
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; }默认情况下,用open打开管道是阻塞的模式,也就是说,如果管道没有数据,程序一直停在 read 函数这里,直到管道里面有数据,把它读出来。
创建一个管道,运行程序,现象就是这样的,程序此时阻塞在 read 函数。
如果通过写进程往管道里面写入数据,read能立马把数据读出来。
open函数还给我们提供了非阻塞的模式,加上这个选项,运行程序的时候,即使管道里面没有数据,程序也不会停在 read 函数上,继续向下执行。
这两个现象,就是阻塞和非阻塞。
最后,放上百科的一段解释,大家还有什么见解,欢迎在评论区交流。
阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。 阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。 非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。 因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
阻塞
+关注
关注
0文章
24浏览量
8044
原文标题:什么是阻塞和非阻塞
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
Verilog语言中阻塞和非阻塞赋值的不同
来源:《Verilog数字系统设计(夏宇闻)》 阻塞和非阻塞赋值的语言结构是Verilog 语言中最难理解概念之一。甚至有些很有经验的Verilog 设计工程师也不能完全正确地理解:何时使用非阻塞
Verilog阻塞和非阻塞原理分析
Verilog阻塞和非阻塞原理分析在Verilog语言最难弄明白的结构中“非阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“
发表于 11-23 12:02
linux串口通信阻塞与非阻塞问题。
一般情况下串口通信中read()函数都是阻塞的。当然也可以通过设置文件等方法把串口设为非阻塞的。这里就有一个问题,当串口设置为阻塞状况下,如果读不到数据程序应该挂起。这种所谓的读不到数
发表于 07-14 15:57
verilog中的阻塞和非阻塞
这个是非阻塞赋值,b的值为0,仿真结果也是0module TOP(input clk,input rst,output reg b );reg a,c;always@(posedge clk or negedge rst)beginif(~rst)begina
发表于 09-13 15:55
【分享】Verilog中阻塞与非阻塞语句
同了在第一个clk上升沿到来时,由于b的值未知,赋给c之后,c也为未知值;紧接着,把a的值给b,由于a的值已经给出,所以,结束之后,a、b的值相同,c为x。综合之后,生成两级移位寄存器。 关于非阻塞
发表于 11-03 20:26
阻塞(=)与非阻塞(<=)介绍
语句的执行,延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。 非阻塞赋值操作符用小于等于号(即
发表于 07-03 10:23
阻塞(=)与非阻塞(<=)介绍
语句的执行,延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。 非阻塞赋值操作符用小于等于号(即
发表于 07-09 05:08
阻塞与非阻塞I/O
里面,因为硬件资源获得的同时往往伴随着一个中断。 注意:驱动程序需要提供阻塞(等待队列,中断)和非阻塞方式(轮询,异步通知)访问设备。 休眠(被阻塞)的进程处于一个特殊的不可执行状态。
发表于 07-09 08:19
深入分析verilog阻塞和非阻塞赋值
学verilog 一个月了,在开发板上面写了很多代码,但是始终对一些问题理解的不够透彻,这里我们来写几个例子仿真出阻塞和非阻塞的区别
发表于 02-11 03:23
•1237次阅读
网络IO模型:阻塞与非阻塞
阻塞 IO 模型 在Linux ,默认情况下所有的 socket 都是阻塞的,一个典型的读操作流程如图所示。 阻塞和非阻塞的概念描述的是用户线程调用内核 IO 操作的方式:
![网络IO模型:<b class='flag-5'>阻塞</b>与非<b class='flag-5'>阻塞</b>](https://file1.elecfans.com/web2/M00/A7/4B/wKgaomUicjqADD-QAAidasfaZkc659.jpg)
评论